本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2021/03/17/spring-native-way/
Spring Native本质上其实是依赖于GraalVM的native image功能,所以要先安装相关依赖。
安装graalvm
MacOS的安装依赖brew,官方有一个tap。
brew install --cask graalvm/tap/graalvm-ce-lts-java11
安装以后使用gu工具安装native-image工具
gu install native-image
SpringNative构建
首先进行的是AOT插件,插件会根据上下文进行一些优化,主要是为了增强native image的兼容性。
其次会进行jar包构建,构建后的jar包也是可以在JVM环境下正常运行。
最后就是build-image这一步,其实启用native与否的关键主要在buildpacks上。首先会自动探测需要应用的buildpacks。如果系统变量BP_NATIVE_IMAGE是true的话就会激活paketo-buildpacks/native-image
。
这个插件的native目录包含了对应的GO文件,会调用native-image进行生成操作。生成后会放入image中。
构建本身还是比较快的。
出错情况
最常见的出错就是native-image没有安装或者没有使用graalvm,一般提示native-image找不到。
目前spring-native要求GraalVM 21.0.0,版本如果低了可能有部分参数不支持,比InlineBeforeAnalysis等。
可以通过BP_NATIVE_IMAGE_BUILD_ARGUMENTS指定一些特殊参数,常见的如下:
- --verbose
- -H:+PrintAnalysisCallTree
- -H:+TraceClassInitialization
- -H:+ReportExceptionStackTraces
- --enable-all-security-services
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2021/03/17/spring-native-way/