【问题标题】:Differences between jar and war in Spring Boot?Spring Boot中jar和war的区别?
【发布时间】:2017-12-23 05:48:11
【问题描述】:

我即将使用 Spring Boot 使用 Spring Framework 在 Java 中构建我的第一个网站,在 jar 中构建它要容易得多,但我有几个问题。

一般有什么区别?

jar 文件中,视图位于/resources/templates 下,但在war 文件中,它位于/webapp/WEB-INF/ 下。

有什么区别?我可以在在线主机上部署jar 吗?

【问题讨论】:

    标签: java spring spring-boot jar war


    【解决方案1】:

    可以告诉 Spring Boot 生成一个“胖 JAR”,其中包含所有模块/服务的依赖项,并且可以使用 java -jar <your jar> 运行。请参阅“使用 Maven 创建可执行 JAR”here

    Spring Boot 也可以告诉produce a WAR file,在这种情况下,您可能会选择将其部署到 Web 容器,例如 Tomcat 或 Jetty。

    更多关于 Spring Boot 部署的详细信息here

    【讨论】:

    • 在这种情况下不要忘记排除嵌入式tomcat;检查@lazyneuron 答案中的链接
    • @HamaSaadwn 仅供参考,以war 构建的spring-boot 应用程序也可以以java -jar xxx.war 运行。当您通过移动到 fat jar 对部署基础架构进行更改时,可以在某些过渡阶段使用它
    • 它是否“胖”(即包含所有依赖项)和可执行文件,不取决于它是 .jar 文件还是 .war 文件。这个当前接受的答案并不能解释两者之间的区别(这是所要求的)。
    • 有什么区别?你没有回答问题!!!
    • 真正的问题从未得到解答?我认为最初的问题是关于差异......
    【解决方案2】:

    取决于您的部署。如果您计划将应用程序部署到现有的 Java EE 应用程序服务器(例如 Tomcat),那么标准方法是执行 war 构建。

    当您使用fat jar 方式时,您的应用程序将部署在spring boot 提供的嵌入式应用程序容器上。进行Deploying Spring Boot Applications 了解更多信息。

    【讨论】:

    • 这是所有问题的正确答案(说明差异)。
    • 您也可以创建一个可执行的war文件,在这种情况下,它的工作方式与jar相同,但具有war布局。所以这并不是两者之间的真正区别。
    • 为什么一个人会选择部署在外部服务器上?这是否意味着失去了 sprint boot 的美感,它本来应该自动初始化服务器..
    【解决方案3】:

    以胖*.jar 运行spring-boot 应用程序

    可以使用嵌入式应用程序容器构建所谓的fat JAR 可执行*.jar 文件(Tomcat 作为默认选项)。 有用于各种构建系统的spring-boot 插件。这是mavenspring-boot-maven-plugin

    要执行fat *.jar 的那种,你可以简单地运行命令:

    java -jar *.jar
    

    或者使用spring-boot-maven目标:

    mvn spring-boot:run
    

    spring-boot 应用程序构建为*.war 存档

    另一种选择是将您的应用程序作为老式的war 文件发送。它可以部署到任何 servlet 容器。这是一步一步的操作方法列表:

    1. packaging改成war(说说maven的pom.xml
    2. SpringBootServletInitializer 继承主应用程序类spring-boot 并覆盖SpringApplicationBuilder configure(SpringApplicationBuilder) 方法(参见javadoc
    3. 确保将spring-boot-starter-tomcatscope设置为provided

    More info in spring-boot documentation

    【讨论】:

    • 相同的步骤是否适用于 gradle?
    • @HamaSaadwn 绝对!
    • 谢谢,但是如果是fat jar,我们如何配置tomcat?例如配置 ssl?
    • @ashkanr 在这里查看 spring-boot 属性列表docs.spring.io/spring-boot/docs/current/reference/html/…。基本上,属性是配置嵌入式 Tomcat 实例的常用方法。
    【解决方案4】:

    当我在本地免费部署我的 jar 问题时,我遇到了同样的问题。然后我不得不在服务器上演示它。您可以通过更改 pom.xml ,标签来创建一个war文件

    <packaging>jar</packaging>
    

    <packaging>war</packaging>
    

    你的目标中会有一个war文件,你可以将它部署到你的服务器(在我的例子中是tomcat)

    【讨论】:

      【解决方案5】:

      如果您需要将其部署在外部容器中,通常必须创建一个 war 文件(不必是可执行文件)。

      如果要使用嵌入式容器,可以选择创建可执行的 .jar 文件或可执行的 .war 文件。 AFAIK 唯一的区别在于存档的布局,因此通常也是源存储库的布局。

      例如使用 Maven / Gradle 的标准文件夹结构,.jar 的静态资源需要在 src/main/resources/static 中,而对于 .war 文件,它们应该在 src/main/webapp 中。

      【讨论】:

      • ...而对于 .war 文件,它们应该在 src/main/webapp.
      • @HolmesQueen 很好,我已经更新了答案。
      【解决方案6】:

      简单易行的答案。 封装类型jar 表示为独立应用程序,封装类型war 表示为Web 应用程序。

      【讨论】:

        【解决方案7】:

        war 文件是一个 Web 应用程序存档,它在应用服务器中运行,而 .jarJava 应用程序存档,它在用户计算机上运行桌面应用程序. war 文件是一个特殊的 jar 文件,用于打包 Web 应用程序,以便将其部署到应用程序服务器上。

        【讨论】:

          猜你喜欢
          • 2011-08-17
          • 2018-10-31
          • 2015-07-16
          • 2016-05-01
          • 1970-01-01
          • 2016-03-23
          • 2015-12-31
          • 1970-01-01
          • 2020-07-02
          相关资源
          最近更新 更多