由于公司运维部署项目采用的都是外置tomcat形式,所以要将springboot默认jar形式改成war形式,其中遇到各种坑,在此记录一下,也希望可以帮助遇到同样坑的伙伴。
如标题,我项目不是继承spring-boot-starter-parent形式,如下:
<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.7.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
因为我的是一个web项目,引入spring-boot-starter-web,此模块包含tomcat,所以在pom做如下剔除即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
对啦,剔除之后还要引用如下
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency>
再将packaging jar 改为 war,
构建插件加入如下(注意看代码中的注释,很重要):
<plugin> <!-- The plugin rewrites your manifest --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.7.RELEASE</version> <configuration><!-- 指定该Main Class为全局的唯一入口 --> <mainClass>xxx.Application</mainClass> <layout>ZIP</layout><!--(可选,按需加--> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><!--解决spring boot:run中文乱码(可选,按需加--> <executable>true</executable><!--打包成可执行文件(可选,按需加)--> </configuration> <executions> <execution> <goals> <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中,继承的可以不用加这个,parent中有--> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml><!-- 此处必须要加这个,否则会报miss web.xml错误 --> <archive> <manifest> <mainClass>xxx.Application</mainClass> <addDefaultImplementationEntries>true</addDefaultImplementationEntries> </manifest> </archive> </configuration> </plugin>
最后,最重要的一个就是更改启动类Application,修改如下(也请注意注释):
@SpringBootApplication //@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})如果项目不需要连数据库,一定要剔除dataSource自动配置,否则会报错误,具体你实验就知道了,哈哈 public class Application extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } }
按照以上操作完就可以把打好的war放到外置的tomcat跑起来了,躺坑记录完毕,又可以愉快地耍了~~