1、去除自带的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>
2、改装启动器
@SpringBootApplication
public class BdknowsApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(BdknowsApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(BdknowsApplication.class);
}
}
3、maven 插件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
4、可以进行clean package操作,对了<packaging>war</packaging>
最好也加到pom里面!
5、传到服务器,启动tomcat,结果是服务能运行,但是查看tomcat启动log,报了错,一大堆
ERROR org.apache.catalina.startup.ContextConfig- Unable to process Jar entry [module-info.class] from Jar [jar:file:/opt/app/tomcat/webapps/test/WEB-INF/lib/jackson-datatype-jdk8-2.11.1.jar!/] for annotations
类似报错log有很多,上网查了一下类似问题,这类问题生成的原因主要有两个:
1、jDK版本不对应
2、jar包冲突
第二个是最常见的,冲突的原因就是你本地pom虽然屏蔽了本地tomcat的引用,但是还有部分依赖没有屏蔽掉,比如 jackson-datatype-jdk8-2.11.1.jar
这个!我第一想法就是消除本地相关依赖,毕竟tomcat服务是公用的,我不能更改以至于影响其他人使用。此时又出现其他让人头疼的问题!!!
上面类似报错信息类似的有十多个,我在pom文件中通过插件快速定位到相关依赖并且进行屏蔽,本地启动测试,没问题,启动成功。打war包上传服务器,启动tomcat,启动成功,本地进行访问服务,报错500!<h1>HTTP Status 500 - No converter found for return value of type: class java.util.LinkedHashMap</h1>
删除依赖过多以至于部分基础包也无法使用,上网搜索有大佬给出了一个方法!在tomcat启动的时候让他不再扫描这几个包。打开在tomcat的conf目录里面catalina.properties的文件,在tomcat.util.scan.DefaultJarScanner.jarsToSkip=\
这行代码下面加上去你要屏蔽的jar包,比如我上面报错的包名是jackson-datatype-jdk8-2.11.1.jar
, 我便在下面加上 jackson-datatype*.jar\
,重启tomcat,便不再包错了!