最近项目升级jdk,从jdk7 升级到 jdk8,本地已经自测完成了,需要部署到测试环境,测试环境已经装好 jdk8 了,但是tomcat 的版本还是 7。不过,据我之前了解,tomcat7是可以运行JDK8编译的web工程的,只要tomcat的运行环境的JDK是1.8即可。但是不能有比JDK1.8还要新的特性。所以最终决定不升级 tomcat 版本。
等我把项目部署到 测试环境 tomcat 下后,项目是可以跑起来的且能正常运行,但是在项目启动过程中,报了一堆错:
SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:file:/home/.......(中间省略)....../WEB-INF/lib/jakarta.ws.rs-api-2.1.5.jar!/] for annotations org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:136) at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:59) at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:208) at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:118) at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2055) at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1931) at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1897) at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1882) at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1314) at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:873) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:371) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5355) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
报错的不仅这一条,有很多条,分别对应不同的jar包。
我在网上苦寻解决方案,找到和实践过的方案包括下面几个:
修改web.xml 加 metadata-complete="true": https://www.cnblogs.com/ning-blogs/p/4480438.html 升级aspectjweaver的依赖: https://blog.csdn.net/guoshengkai373/article/details/53404830 升级单个jar: https://www.cnblogs.com/wxylog/p/9721332.html
这些方案,对应解决我的问题都不行,我一度产生了升级 tomcat 版本的想法,但最终我还是找到了解决方案。
参考:https://blog.csdn.net/JackRen_Developer/article/details/82288488
最终解决方案是: 修改 tomcatconfcatalina.properties,tomcat.util.scan.DefaultJarScanner.jarsToSkip 节点增加 相应 的 jar,然后重启tomcat。
就这样,没有升级tomcat版本,问题解决。