spring boot+maven项目打包成war包部署到tomcat
一、配置pom文件
1、移除spring boot内置的tomcat
<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、添加servlet支持
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
3、设置打包为war
<!-- 这里设置打包的形式 默认为jar -->
<packaging>war</packaging>
下图是位置
4、修改SpringApplication 启动类配置
package com.shop.JZShop;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
//JzShopApplication为spring boot项目本身的启动类
return builder.sources(JzShopApplication.class);
}
}
这个启动类要与spring boot项目的启动类在同一目录下
二、将项目打包为war包
1、右键单击项目名-> Run As ->Maven clean
这里 maven 会清楚掉之前对这个项目所有的打包信息
2、进行完上一步后会出现如下信息
3、右键单击项目-> Run As ->Maven build
4、在 Goals框内填写 -X package 并照下图勾选
执行后如果报错 **No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?**说明可能没有选择jdk版本,右键项目->Build Path 选择默认的jdk即可,或者根据项目所使用的jdk版本进行配置
同时window->preferences->java->installed JREs 这里需要选择jdk
5、如果一切顺利,最后控制台会显示如下信息
然后在项目名上右键单击->refresh 刷新一下,在target 目录下会找到生成的war包
三、将项目部署到Tomcat
1、将war包放到Tomcat的 webapps目录下
2、修改 tomcat 中 conf 目录下的配置文件 server.xml,在配置文件中找到Host标签,在其中添加如下内容。这里使用的是相对路径,doBase 属性的值是我们所打 war 包的名称
<Context docBase="JZShop-0.0.1-SNAPSHOT" path="/" reloadable="true" privileged="true"/>
修改这一项是因为如果不添加这一句,用tomcat访问时需要加上项目名,这也是为什么doBase属性的值是项目名的原因。
3、tomcat版本问题
因为spring boot内置的tomcat是8.5的版本,所以你所使用的tomcat也需要是8.5的版本,我最开始用的是7.0的版本,tomcat启动后报错项目启动失败。