Spring Boot 中 jar 和 war 的区别?

Differences between jar and war in Spring Boot?

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

大体上有什么区别?

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

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

Spring Boot 可以被告知生成一个 'fat JAR',其中包括所有 module/service 的依赖项,并且可以是 运行 和 java -jar <your jar>. See "Create an executable JAR with Maven" here

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

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

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

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

运行spring-boot申请为胖子*.jar

可以使用嵌入式应用程序容器(Tomcat 作为默认选项)构建所谓的 fat JAR 可执行 *.jar 文件。 有 spring-boot 用于各种构建系统的插件。这是 maven 的那个:spring-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 应用程序 class 并覆盖 SpringApplicationBuilder configure(SpringApplicationBuilder) 方法(参见 javadoc
  3. 确保将 spring-boot-starter-tomcatscope 设置为 provided

More info in spring-boot documentation

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

创建一个 war 文件
<packaging>jar</packaging>

<packaging>war</packaging>

并且您的目标中将有一个 war 文件,您可以将其部署到您的服务器(tomcat 在我的例子中)

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

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

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

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

简单易懂的答案。 打包类型 jar 表示为独立应用程序,打包类型 war 表示为 Web 应用程序。