项目使用了springNative,做了些许尝试,所以做下记录。
首先要知道GraalVM(没时间细研究,不多介绍,有兴趣的自己研究),springNative基于GraalVM不知道这个描述是否准确,但是我们不需要orcal的jvm了,只需要GraalVM。
开发项目的时候就和普通的项目一样正常开发即可,springNative buildtools插件,会自动转换代码到native。
我们可以使用https://start.spring.io/或者IDEA来创建一个基础的SrpingNative项目,因为我mvn的一直有个插件下载不下来,所以用的gradle创建的项目。
创建项目的时候springNative必选,其他的组件看自己需要选择,其中有大部分组件是springNative已经支持的,一部分是不支持的。这个可以参考自己的实际情况选择。

创建好项目后,可以随便写几句测试代码。
然后我们看下build.gradle文件里的命令
springNative的用到的命令主要有两个./gradlew bootBuildImage 和 ./gradlew nativeBuild
- bootBuildImage: 用docker构建一个native的镜像出来
- nativeBuild:构建一个本地的可执行文件
目前我用的SpringNative buildtools的版本是0.9.4,在接下来的版本0.9.8里NativeBuild会被其他命令代替,最新的版本也解决了不少bug,包括下面这个bug:
Execution failed for task ':nativeBuildClasspathJar'.
> Cannot expand ZIP 'C:\Users\liusanjun\IdeaProjects\demo1\build\resources\aot' as it is not a file.如果可以,建议您直接用最新的版本
构建项目的时候最好使用大内存的机器,最好使用linux进行构建,比较简单方便,windows构建的话会需要一些运行库,不做研究了。
我是在win11的wsl上进行构建的。
首先安装下graalvm和gradle,然后设置PATH和JAVA_HOME(不做赘述),还需要安装下下面的库才能顺利编译:
sudo apt-get install build-essential libz-dev zlib1g-dev
安装上面的组件后,就可以切换到项目目录下使用 ./gradlew nativeBuild 或者 ./gradlew bootBuildImage(bootBuildImage命令需要docker)进行构建
当我们使用bootBuildImage会花费大量的时间去下载其使用到的包,不建议这么使用。
使用NativeBuild 编译完成后会在\build\native\nativeBuild目录下生成可执行文件,可以直接运行
./demo
或者
./demo --spring.profiles.active=dev

就可以看到项目已经启动起来

另外当你项目足够大,编译的时候内存不够大的时候,会内存溢出。
本文介绍了SpringNative的使用,它基于GraalVM,允许将Spring应用转换为原生可执行文件。通过Spring Native buildtools插件,可以便捷地将代码转换。使用Gradle创建项目,选择必要的组件,并通过`./gradlew bootBuildImage`和`./gradlew nativeBuild`命令构建原生镜像和本地可执行文件。在Windows环境下,需要额外的库支持,并建议在Linux环境中构建以简化流程。遇到的问题包括资源非文件错误和内存溢出,建议使用最新版本解决这些问题。
819

被折叠的 条评论
为什么被折叠?



