Paketo Spring启动3.0 jar问题



我目前正在迁移到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。在这种情况下,请在这里打开一个问题,并张贴一个样本来复制。

最新更新