1.背景
springboot2+,打包成war放在tomcat8里面启动,日志报异常如下:
Unable to process Jar entry [module-info.class] from Jar
org.apache.tomcat.util.bcel.classfile.ClassFormatException:
Invalid byte tag in constant pool: 19
2.分析原因
module-info.class这个是JDK9的特性,而springboot2,自带的是tomcat9。
打包时,如果没有把tomcat包排除,则会将tomcat9的相关包带到war中,导致jar冲突问题。
3.解决办法
两种方法
改代码、不改代码
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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2.停tomcat服务,直接到tomcat的webapp路径下,找到lib目录,手动把tomcat9的包删除,再重启。