我目前正在迁移到Sping Boot 3.0。在此过程中,我正在考虑使用新集成的Native支持。
使用pack构建和发布映像时,出现错误:
Executing native-image -H:+StaticExecutableWithDynamicLibC -jar /workspace
Error: /workspace is a directory. (-jar requires a valid jarfile)
显然,native-image buildpack正在尝试使用文件夹而不是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命令中重现这个问题。
可以在here中找到完整的堆栈跟踪。
如果有人能给我指个方向,那就太好了!
1条答案
按热度按时间kupeojn61#
我相信您在Spring/Gradle和Buildpack之间遇到了一个相当常见的问题。
我想是在Sping Boot 2.7中,一个设置发生了变化,导致Gradle构建在默认情况下同时生成引导和常规JAR文件。这本身并不是问题,但构建包需要以不同于单个JAR文件的方式处理多个JAR文件,而像原生映像构建这样的事情仍然只能处理单个JAR文件。
我确信您的构建生成了两个JAR文件,正如我在您链接的输出中看到的那样。
还原多个人工因素
所以这是一个很好的迹象,表明你正在处理这个问题。
好消息是,这是一个简单的修复方法,您只需要告诉Gradle只构建引导JAR即可。
在
build.gradle
中设置以下内容:或
build.gradle.kts
:请看这里或这里的Kotlin。
如果这样做没有帮助,您可能遇到了bug。在这种情况下,请打开一个issue here and post a sample to reproduce。