我使用分级阴影插件构建了一个胖罐子,如下所示:
tasks {
"build" {
dependsOn(shadowJar)
}
shadowJar {
mergeServiceFiles {
var path = "META-INF/"
}
manifest.inheritFrom(jar.get().manifest)
manifest.attributes["Main-Class"] = "some.main.class.Main"
manifest.attributes["Implementation-Version"] = version
}
}这是没有问题的,当我做gradle build和java -jar fat_jar_name.jar时,我已经在MacOS、Windows和Ubuntu (WSL)中进行了测试。相同的命令在所有这些平台上的工作方式完全相同,即使.jar不是在本地构建的,但出于某种原因,它在Docker中不能使用eclipse-temurin。
我试图使用以下方法在Docker中运行一个.jar文件:
FROM eclipse-temurin:17
ARG JAR_FILE=build/libs/*jar
COPY ${JAR_FILE} fat_jar_name-all.jar
ENTRYPOINT java -jar fat_jar_name.jar我使用docker image build -t image_name .构建映像,然后尝试使用docker run -d -p 8080:8080 image_name运行它。
我在运行时会得到这个错误:
no main manifest attribute, in fat_jar_name-all.jar我发现这个问题与导出的META-INF\MANIFEST.MF文件中没有一个.jar文件有关。但是,fat_jar_name.jar确实包含一个清单文件,其中包含以下内容:
Manifest-Version: 1.0
Main-Class: some.main.class.Main
Implementation-Version: 3.9.1-SNAPSHOT在Docker、Gradle或Shadow Plugin级别上,有什么东西是我所缺少的吗?
我为Shadow Plugin找到了关于配置清单的Shadow Plugin,但是它没有提到main manifest attribute。
发布于 2022-12-04 07:22:31
我发现我使用的COPY命令被破坏了。我用这个代替了:
FROM eclipse-temurin:17
COPY build/libs/fat_jar_name-all.jar /
ENTRYPOINT java -jar fat_jar_name-all.jarhttps://stackoverflow.com/questions/74673460
复制相似问题