第一步:修改pom文件将打包方式改成war包
<packaging>war</packaging>
第二步:利用maven-dependency-plugin插件进行依赖包的复制
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
</execution>
</executions>
<configuration>
<artifactItems>
<artifactItem>
<groupId>xxxx</groupId>
<artifactId>xxxxx</artifactId>
<version>1.0</version>
<!-- ${project.build.directory}:项目构建输出目录,默认为 target/ -->
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</plugin>
第三步:spring-boot-starter-web中的tomcat剔除
<!-- 引入spring-boot-starter-web依赖启动器时,就可以实现Web场景开发,而不需要额外导入Tomcat服务器以及其他Web依赖文件等 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
第四步:手动添加servlet-api依赖
<!-- 屏蔽springboot 中的tomcat 添加servlet-api 依赖 -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>8.0.36</version>
<scope>provided</scope>
</dependency>
第五步:修改Application启动类
public class StartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(StartApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(StartApplication.class,args);
}
}
第六步:在pom文件中修改profile参数
spring:
profiles:
active: @profileActive@
第七步:打包时输入命令
命令:
mvn install -Dmaven.test.skip=true -DprofileActive=prod
打包启动成功了!!!
jar包和war包启动区别
jar包:执行SpringBootApplication的run方法,启动IOC容器,然后创建嵌入式Servlet容器
war包: 先是启动Servlet服务器,服务器启动Springboot应用(springBootServletInitizer),然后启动IOC容器
SpringBootServletInitializer实例执行onStartup方法的时候会通过createRootApplicationContext方法来执行run方法,接下来的过程就同以jar包形式启动的应用的run过程一样了,在内部会创建IOC容器并返回,只是以war包形式的应用在创建IOC容器过程中,不再创建Servlet容器了。