![](/img/trans.png)
[英]'No main manifest attribute' while running JAR file built with Gradle
[英]Gradle Shadow Plugin .jar not running on Docker container, no main manifest attribute
我像這樣使用Gradle Shadow 插件構建了一個胖子 jar:
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 中運行 a.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
我發現此問題與導出的.jar
中沒有META-INF\MANIFEST.MF
文件有關。 但是, 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
資源,但它沒有提及main manifest attribute
。
我發現我使用的COPY
命令被破壞了。 我改用這個:
FROM eclipse-temurin:17
COPY build/libs/fat_jar_name-all.jar /
ENTRYPOINT java -jar fat_jar_name-all.jar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.