代码之家  ›  专栏  ›  技术社区  ›  dave0688

docker容器中的Deploy.war文件:中没有主清单属性应用程序war

  •  0
  • dave0688  · 技术社区  · 8 年前

    我的Dockerfile如下所示:

    FROM java:8
    EXPOSE 8080
    ADD /App.war app.war
    ENTRYPOINT ["java", "-jar", "app.war"]
    

    我有我的 App.war

    docker run -p 8080:8080 -t app
    

    它引发以下异常:

    no main manifest attribute, in app.war
    

    但是,当我检查应用程序war,在/META-INF中有一个清单/舱单.MF说明以下选项:

    Manifest-Version: 1.0
    Start-Class: com.package.app.AppMainClass
    Spring-Boot-Classes: WEB-INF/classes/
    Spring-Boot-Lib: WEB-INF/lib/
    Spring-Boot-Version: 1.4.0.RELEASE
    Main-Class: org.springframework.boot.loader.WarLauncher
    

    因此,据我所知,错误消息表明清单中缺少一个主类属性(这是不可能的,因为它在那里)。 我也尝试过添加真正的类作为主类。

    这导致了同样的错误。

    有人能帮我回到正轨吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   granadaCoder    7 年前

    首先,不要把springboot项目当作WAR来构建。如果你有一个古老的项目,迫使你将应用部署到一个web服务器/servlet容器,那么你只需要WAR。您需要从构建脚本中删除与战争相关的逻辑。

    第二。确保正确构建项目。如果是gradle,你需要用 ./gradlew build mvn package

    查找有关如何将spring引导应用程序放入Docker的更多详细信息 in the user guides .

    using the war-plugin provided by spring boot (不是内置的war插件)。这是构建可执行战争档案的唯一有效方法。