Spring Boot Paketo Sping Boot 3.0 jar问题

9rygscc1  于 2022-12-13  发布在  Spring
关注(0)|答案(1)|浏览(190)

我目前正在迁移到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中找到完整的堆栈跟踪。
如果有人能给我指个方向,那就太好了!

kupeojn6

kupeojn61#

我相信您在Spring/Gradle和Buildpack之间遇到了一个相当常见的问题。
我想是在Sping 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。在这种情况下,请打开一个issue here and post a sample to reproduce

相关问题