簡體   English   中英

Gradle Shadow Plugin.jar 未在 Docker 容器上運行,沒有主清單屬性

[英]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時,這沒有問題,我已經在MacOSWindowsUbuntu (WSL)中進行了測試。 相同的命令在所有這些平台上的工作方式完全相同,即使 .jar 不是本地構建的,但由於某種原因它在Dockereclipse-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

我在DockerGradleShadow 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM