打成war包
打成war包一般可以分两种方式来实现,第一种可以通过eclipse这种开发工具来导出war包,另外一种是使用命令来完成,这里主要介绍后一种
1.修改配置文件
maven:pom文件
<packaging>war</packaging>
gradle:build.gradle文件
apply plugin: 'war'
2.打包时排除tomcat
maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
在这里将scope属性设置为provided,这样在最终形成的WAR中不会包含这个JAR包,因为Tomcat或Jetty等服务器在运行时将会提供相关的API类。
gradle:
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.4.2.RELEASE"){
exclude mymodule:"spring-boot-starter-tomcat"
}
}
3.注册启动类
创建ServletInitializer.java,继承SpringBootServletInitializer ,覆盖configure(),把启动类Application注册进去。外部web应用服务器构建Web Application Context的时候,会把启动类添加进去。
public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyApplication.class); } }
SpringBootServletInitializer的执行过程,简单来说就是通过SpringApplicationBuilder构建并封装SpringApplication对象,并最终调用SpringApplication的run方法的过程。
参考:spring-boot-使用外置的Servlet容器学习
springboot启动过程详解:https://www.jianshu.com/p/cb5cb5937686
4.build
maven:
cd 项目跟目录(和pom.xml同级)
mvn clean package
## 或者执行下面的命令
## 排除测试代码后进行打包
mvn clean package -Dmaven.test.skip=true
会在target目录下生成:项目名+版本号.war文件,拷贝到tomcat服务器中启动即可。
gradle:
gradle build
war会生成在buildlibs 目录下。
参考:
http://www.ityouknow.com/springboot/2017/05/09/springboot-deploy.html