Spring Boot中jar和war之间的区别?

Ham*_*dwn 19 java spring jar war spring-boot

我将使用Spring Boot使用Spring Framework构建我的第一个使用Java的网站,并且它更容易构建它jar,但我有一些关于它的问题.

一般有什么不同?

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

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

laz*_*ron 17

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

当您使用 fat jar 方法时,您的应用程序将部署在 Spring Boot 提供的嵌入式应用程序容器上。执行部署 Spring Boot 应用程序以获取更多信息。


gly*_*ing 12

可以告诉Spring Boot生成一个'fat JAR',它包含所有模块/服务的依赖项,并且可以运行java -jar <your jar>.请参阅此处的 "使用Maven创建可执行JAR" .

也可以告诉Spring Boot 生成WAR文件,在这种情况下,您可能会选择将其部署到Web容器(如Tomcat或Jetty).

在春季启动部署大量的更多的细节在这里.

  • 有什么不同?你没有回答问题!!! (4认同)
  • 它是否是“胖”(即包含所有依赖项)和可执行文件,并不取决于它是 .jar 还是 .war 文件。当前接受的答案并没有解释两者之间的区别(这就是所问的)。 (2认同)

ril*_*aby 6

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

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

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

java -jar *.jar
Run Code Online (Sandbox Code Playgroud)

或使用spring-boot-maven目标:

mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)

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

另一种选择是将您的应用程序作为旧式war文件发送.它可以部署到那里的任何servlet容器.以下是逐步列出的方法:

  1. 更改packagingwar(谈论Maven的pom.xml)
  2. 继承主spring-boot应用程序类SpringBootServletInitializer和覆盖SpringApplicationBuilder configure(SpringApplicationBuilder)方法(参见javadoc)
  3. 确保设定scopespring-boot-starter-tomcat作为provided

有关spring-boot文档的更多信息


Gro*_*oot 6

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

<packaging>jar</packaging>
Run Code Online (Sandbox Code Playgroud)

<packaging>war</packaging>
Run Code Online (Sandbox Code Playgroud)

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


her*_*man 6

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

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

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