2018-08-29 小赖 文档初始化
springBoot 带有内置Tomcat 服务器,可以直接将项目打包成jar运行,但是如果在需要把项目达成war包该怎么办呢?下面是将springboot项目部署为war项目的一些步骤
1. pom.xml中将打包形式jar修改为war
修改前:
<packaging>jar</packaging>
修改后:
<packaging>war</packaging>
2. 移除原有内置Tomcat
将springboot内置的Tomcat依赖移除 ,需要注意的是,使用不同的模板引擎的时候,需要移除的依赖位置也不同,下面是原生的依赖和thymeleaf 模板引擎移除依赖的一些方法 (后面打包发现。 可以不需要在依赖中去除tomcat 依赖直接添加)。
# 原生Tomcat依赖移除
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
# thymeleaf 模板引擎依赖移除
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
添加的依赖:
<!--因配置外部TOMCAT 而配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--因配置外部TOMCAT 而配置-->
3. 设置打包后的项目访问名称
设置打包后的项目访问名称,在build节点里设置文件名
<finalName>ROOT</finalName>
(这里是一个特别需要注意的地方,由于开始的时候是使用的单模块程序,所以可以对项目命名,但是在多模块打包中发现,如果添加项目名称 这个结点。打包好的程序在tomcat中运行的时候会发生错误,war 包的目录格式有问题,建议finalName设置的名称 == artifactId名称)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>ROOT</finalName>
</build>
4. 初始化 Spring 应用上下文
由于我们需要使用外部Tomcat服务器部署war包,所以不能使用创建项目的application.java 这个main方法了,需要重写一个类似于 web.xml 文件配置的方式来启动 Spring 应用上下文,此时我们需要声明一个类,这个类的作用与在 web.xml 中配置负责初始化 Spring 应用上下文的监听器作用类似。
我们平常用main方法启动的方式,都有一个App的启动类,代码如下:
@SpringBootApplication
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter
{
public static void main(String[] args) {
SpringApplication.run(BootWithActivitiApplication.class, args);
}
}
Application类的同级添加一个SpringBootStartApplication类,其代码如下:
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(BootWithActivitiApplication.class);
}
}
5. 部署
略。
基本上到这步就算是成功了,没有遇到下述问题可略过。
6.解决打包后resources下的文件全部丢失
打包后resources下的文件全部丢失,如下图所示:
![]()
classes文件夹下只有com开头的class文件,resources中的配置文件、静态资源都没有打包进来。
解决办法:Application类上面的有注解@ComponentScan导致文件丢失,去掉此注解即可。(不一定只有这一个原因,其他原因还未发现。) 网上还有另一个造成此问题
修改前:
@SpringBootApplication
@ComponentScan({"org.activiti.rest.diagram","com.spcx.activiti"})
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter{
}
修改后:
@SpringBootApplication
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter{
}