And*_*ani 5 spring-boot graalvm graalvm-native-image
我刚刚使用 Maven 将几个项目升级到 Java 19、Spring Boot 3.0.2、Kotlin 1.8.0,我希望 Spring Boot 生成本机映像。
<java.version>19</java.version>
<kotlin.version>1.8.0</kotlin.version>
Run Code Online (Sandbox Code Playgroud)
配置的相关部分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>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用以下命令构建其中一个项目时
mvn -Pnative spring-boot:build-image
Run Code Online (Sandbox Code Playgroud)
然后构建失败并显示以下错误消息:
[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
Run Code Online (Sandbox Code Playgroud)
少了什么东西?
更新:当我使用 Kotlin 1.7.21 降级到 Java 17 时,构建成功,显然 Liberica Native Image Kit for Java 19 尚不支持。https: //bell-sw.com/pages/downloads/native-图像套件/#/nik-22-19
让我为您提供降级 Java 版本的替代方案(例如,如果您想使用虚拟线程)。
您可能会成功使用 GraalVM 而不是 Liberica NIK。您可以按照Spring Boot 文档部分中的pom.xml描述进行配置:Use an alternative native image toolkit
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildpacks>
<buildpack>gcr.io/paketo-buildpacks/graalvm</buildpack>
<buildpack>gcr.io/paketo-buildpacks/java-native-image</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
由于GraalVM Buildpack 支持 Java 19,因此您应该能够使用它:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildpacks>
<buildpack>gcr.io/paketo-buildpacks/graalvm</buildpack>
<buildpack>gcr.io/paketo-buildpacks/java-native-image</buildpack>
</buildpacks>
<env>
<BP_JVM_VERSION>19.0.1</BP_JVM_VERSION>
</env>
</image>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
作为替代方案,可以不使用构建包来创建本机映像,而是使用本机构建工具入门创建本机mvn -Pnative package可执行文件。
然后,您可以创建自己的 docker 映像(例如使用Dockerfile或类似的映像)并将其包含在内。
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |