Websphere 9.0.0.11使用Java1.8部署WAR包报错,旧WAR可正常运行
问题根因
该报错是WebSphere 9.0.0.11内置的类扫描组件依赖的ASM版本过低,无法识别高版本JDK编译的Class文件导致的:
- WebSphere 9.0.0.11自带的ASM版本仅支持解析Java 8及以下版本编译的Class文件
- 本次打包的WAR中包含的
org.eclipse.core.resources-3.14.0.jar、org.eclipse.equinox.app-1.6.0.jar两个依赖包内的部分Class是使用Java 9及以上版本编译的,触发了ASM解析时的非法参数异常 - Tomcat的类扫描组件兼容性更高,因此相同WAR包可在本地Tomcat正常运行;你本次未修改代码的前提下出现该问题,大概率是Maven依赖传递规则自动拉取了这两个高版本的第三方依赖,可对比新旧WAR包的WEB-INF/lib目录差异验证该判断。
解决方案
方案1:排除不需要的依赖
这两个Eclipse相关的依赖绝大多数场景下都是不必要的传递性依赖,你可以在pom.xml对应的父依赖下添加排除规则,示例配置如下:
<exclusions> <exclusion> <groupId>org.eclipse.platform</groupId> <artifactId>org.eclipse.core.resources</artifactId> </exclusion> <exclusion> <groupId>org.eclipse.platform</groupId> <artifactId>org.eclipse.equinox.app</artifactId> </exclusion> </exclusions>
排除后重新打包部署即可。
方案2:跳过WebSphere对指定JAR的扫描
如果你的业务确实需要使用这两个依赖包,可以修改WebSphere的JVM参数,跳过对这两个JAR包的类扫描:
- 登录WebSphere控制台,依次进入
服务器 > 服务器类型 > WebSphere Application Server > server1 > 进程定义 > Java虚拟机 - 在通用JVM参数栏添加配置:
-Dcom.ibm.ws.ecs.exclude.jars=org.eclipse.core.resources-3.14.0.jar,org.eclipse.equinox.app-1.6.0.jar - 保存配置后重启服务器,重新部署WAR包即可
方案3:升级WebSphere补丁版本
IBM在后续补丁包中已经升级了内置的ASM版本,将WebSphere升级到9.0.0.12及以上版本也可以解决该兼容性问题。
内容的提问来源于stack exchange,提问作者B.Ayaz
相关产品推荐
相关产品推荐

