Spring Boot Native构建失败:native-image-svm无有效依赖问题
问题
将多个项目升级至Java 19、Spring Boot 3.0.2、Kotlin 1.8.0并使用Maven,希望Spring Boot生成原生镜像。相关配置如下:
<java.version>19</java.version> <kotlin.version>1.8.0</kotlin.version>
spring-boot-maven-plugin的配置部分:
<configuration> <image> <env> <BP_JVM_VERSION>19.*</BP_JVM_VERSION> <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE> <BPE_APPEND_JAVA_TOOL_OPTIONS>-XX:+HeapDumpOnOutOfMemoryError -XX:MaxDirectMemorySize=64M</BPE_APPEND_JAVA_TOOL_OPTIONS> <BPE_DELIM_JAVA_TOOL_OPTIONS xml:space="preserve"> </BPE_DELIM_JAVA_TOOL_OPTIONS> </env> </image> </configuration>
执行以下构建命令时:
mvn -Pnative spring-boot:build-image
构建失败,报错信息:
[INFO] [creator] Paketo Buildpack for BellSoft Liberica 9.10.2
[INFO] [creator] unable to find dependency
[INFO] [creator] no valid dependencies for native-image-svm, 19.*, and io.paketo.stacks.tiny in [(jdk, 8.0.362, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jre, 8.0.362, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jdk, 11.0.18, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jre, 11.0.18, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (native-image-svm, 11.0.17, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jdk, 17.0.6, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jre, 17.0.6, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (native-image-svm, 17.0.5, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jdk, 19.0.2, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *]) (jre, 19.0.2, [io.buildpacks.stacks.bionic io.paketo.stacks.tiny *])]
[INFO] [creator] ERROR: failed to build: exit status 1
请问缺少什么配置或依赖?
原因与解决方案
核心原因是Liberica Native Image Kit暂不支持Java 19。从报错信息可见,Paketo的BellSoft Liberica构建包中,没有对应Java 19版本的native-image-svm依赖,仅提供了Java 8、11、17版本的原生镜像支持。
实际验证结果显示:将Java版本降级至17、Kotlin版本降级至1.7.21后,构建可成功完成。
内容的提问来源于stack exchange,提问作者Andras Hatvani

