大部分转载自 https://www.cnblogs.com/zlw-xf/p/7828359.html
加上个人增加的一些知识点
springboot打Jar包和War包
一:打JAR包
在工程的pom.xml中添加以下依赖
<build>
<!-- 打成war不需要这个maven插件,如果打成jar则是必须的 -->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>springbootdemo</finalName>
</build>
我们目前的工程采用的是jar 的打包方式,所以我们在执行package 命令后,会产生一个jar 包。
我们进入到这个目录用压缩软件打开此jar 包,其中我们发现了一个叫lib 的文件夹,打开lib 文件夹发现此文件夹下全是工程依赖的jar 包,甚至还有tomcat。这种包含有jar 包的jar包,我们称之为fatJAR( 胖jar 包)
由于fatJAR 本身就包括tomcat , 我们就不需要另外部署了,直接在命令行就可以把我们的应用启动起来,在命令行,进入到jar 包所在的目录,我们可以通过以下java –jar命令来执行此jar 包。在控制台会出现启动信息,在浏览器访问程序
如果不加这个plugin,打包不会报错,idea也可以正常启动和访问。但是通过java -jar xx.jar单独运行的时候就会报错:*/springboot-demo/target/springbootdemo.jar中没有主清单属性
二:打WAR包
spring-boot 默认提供内嵌的tomcat,所以打包直接生成jar 包,用java -jar 命令就可以启动。但是,有时候我们更希望一个tomcat 来管理多个项目,这种情况下就需要项目是war 格式的包而不是jar 格式的包。
我们按照以下步骤完成对工程的改造
(1)修改pom.xml
将打包方式修改为war
war
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
spring-boot-starter-tomcat 是原来被传递过来的依赖,默认会打到包里,所以我们再次引入此依赖,并指定依赖范围为provided,这样tomcat 相关的jar就不会打包到war 里了.
(2)添加ServletInitializer
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilderapplication) {
return application.sources(Application.class);
}
}
由于我们采用web3.0 规范,是没有web.xml 的,而此类的作用与web.xml相同。
(3)运行package 打包命令生成war 包
生成后将war 包放入tomcat,启动tomcat,测试完成的功能是否可以使用。
三.jar和war方式配置参数的区别
打成jar 指定server.port,server.context-path(新版的springboot是server.servlet.context-path)这些参数只对打成jar包的内置tomcat生效.如果打成war包,这些参数则不起作用,需要去外置tomcat的配置文件里定义这些参数.