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

时间:2017-07-18 11:24:25

标签: java spring spring-boot jar war

我即将使用Spring Boot使用Spring Framework构建我的第一个使用Java的网站,并且在jar中构建它更容易,但我对此有一些疑问。

一般有什么不同?

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

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

7 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:5)

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

运行

可以构建所谓的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. spring-boot继承主要SpringBootServletInitializer应用程序类并覆盖SpringApplicationBuilder configure(SpringApplicationBuilder)方法(请参阅javadoc
  3. 请务必将scope spring-boot-starter-tomcat设为provided
  4. More info in spring-boot documentation

答案 2 :(得分:4)

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

当您使用胖jar方法时,您的应用程序将部署在spring boot提供的嵌入式应用程序容器中。请点击Deploying Spring Boot Applications获取更多信息。

答案 3 :(得分:2)

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

来创建战争文件。
<packaging>jar</packaging>

<packaging>war</packaging>

您的目标中将有一个战争文件,您可以将该战争文件部署到服务器上(在我的情况下为tomcat)

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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