工作中一直使用SpringBoot,SpringCloud框架,都是将tomcat打包到可运行的jar包内运行。最近碰到一个项目需要打成war包放到web服务器中运行,打包方式整理如下:
1、当然是先导入SpringBoot依赖啦
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、依赖配置
1)、去除 tomcat 插件依赖
2)、添加 Servlet jar包依赖,设置 scope=provided
<dependencies>
<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>
<!-- 添加Servlet jar,注意 scope 为 provided -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
3、war包插件
注意(没有web.xml时的属性设置)
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
4、War包运行方式代码配置
Application 启动类是没有什么变化的
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
但是需要配置 web.xml 方式来启动 spring 上下文
在与Application相同包下创建继承 SpringBootServletInitializer 的实现类:
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// return super.configure(builder);
// 指向SpringBoot方式启动执行类
return builder.sources(Application.class);
}
}
5、打包
在 pom.xml 目录内运行maven命令: mvn clean package -Dmaven.test.skip=true