- 一、修改pom.xml中将默认的jar包方式改成war
<!-- 将打包方式修改为war-->
<packaging>war</packaging>
- 二、排除内置的Tomcat容器【以下两种方式均可】
- 方式1
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!--排除默认的tomcat容器--> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
- 方式2
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--provided 不参与打包--> <scope>provided</scope> </dependency>
- 三、添加Maven插件【解决低版本打包需要WEB.xml问题】
<build>
<finalName>boot_pack</finalName>
<plugins>
<!--Maven打包插件,解决打包需要WEB.xml问题-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--解决打包只有几kb问题-->
<configuration>
<mainClass>com.hf.pack.BootPackApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
-
四、继承SpringBootServletInitializer 用于构建war包【以下两种方式均可】
- 方式1:主类上直接继承
package com.hf.pack; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; /** * SpringBootServletInitializer war包容器【项目打jar包时不生效】 */ @SpringBootApplication public class BootPackApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(BootPackApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { //指定主启动类的位置 return builder.sources(BootPackApplication.class); } }
- 方式2:新建一个子类继承
package com.hf.pack; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; /** * @Copyright (C), 2016-2020 hf * @FileName: ServletInitializer * @Author: hf * @Date: 2020/1/8 11:14 * @Description: 用于构建war包容器 */ public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { //指定主启动类的位置 return builder.sources(BootPackApplication.class); } }
-
五、使用Maven命令打包
- 打包命令
#执行打包并忽略测试代码 mvn clean package -Dmaven.test.skip=true
- 注意事项:【当使用外部Servlet容器访问的时候、application.properties或application.yml中的port和context-path属性不再生效】
#当使用外部Servlet容器访问的时候、port和context-path属性不再生效 server: port: 1111 servlet: context-path: /
-
六、将打包完成的war项目放置外部Tomcat容器进行测试
- 先将war包放置Tomcat的webapps目录下,并启动Tomcat
- 测试访问
- 先将war包放置Tomcat的webapps目录下,并启动Tomcat