我目前正在迁移到Spring引导3.0。在这个过程中,我正在考虑使用新集成的Native支持。
当使用pack来构建和发布我的映像时,我得到一个错误:
Executing native-image -H:+StaticExecutableWithDynamicLibC -jar /workspace
Error: /workspace is a directory. (-jar requires a valid jarfile)
显然,本机映像构建包试图使用文件夹而不是jar。我正在使用这个命令来尝试构建映像。
pack -v build ghcr.io/kevinbos-cc/buildpacks-demo:latest
--builder paketobuildpacks/builder:tiny
--path .
--env "BP_JVM_VERSION=17"
--env "BP_NATIVE_IMAGE=true"
--cache-image ghcr.io/kevinbos-cc/buildpacks-demo-paketo-cache-image:latest
--publish
我已经尝试改变paketo-buildpacks/java-native-image使用paketo-buildpacks/graalvm.不幸的是,这些变化产生了相同的结果。
运行时。/gradle bootBuildImage图像创建得很好。但是我不知道如何在pack命令中复制这个。
可以在这里找到完整的堆栈跟踪。
如果有人能给我指个方向,那就太好了!我相信你遇到了Spring/Gradle &构建包是相当常见的。
我想是在Spring Boot 2.7中,一个设置被改变了,导致Gradle构建,默认情况下,生成一个启动和常规JAR文件。就其本身而言,这不是问题,但是构建包需要以不同于单个JAR文件的方式处理多个JAR文件,并且有些事情(如本机映像构建)仍然只能处理单个JAR文件。
我确信您的构建生成了两个JAR文件,正如我在您链接的输出中看到的那样。它是这样写的:
恢复多个工件
所以这是一个很好的迹象,表明你正在解决这个问题。
好消息是,这是一个容易的修复。你只需要告诉Gradle只构建启动的JAR。
在您的build.gradle
中设置:
jar {
enabled = false
}
或build.gradle.kts
:
tasks.getByName<Jar>("jar") {
enabled = false
}
请参阅此处或此处查看Kotlin。
如果这没有帮助,你可能遇到了一个bug。在这种情况下,请在这里打开一个问题,并张贴一个样本来复制。