WebLogic 12部署EAR文件报错:无法解析类文件问题求助
解决WebLogic 12部署EAR时log4j-api类文件解析错误的问题
问题根源
你遇到的BEA-160248错误,本质是log4j-api 2.9.0属于多版本兼容JAR(Multi-Release JARs),它内部包含了针对Java 9的类文件(存放在META-INF/versions/9目录下)。WebLogic 12的类加载器在处理这类JAR时,会尝试解析所有版本的类,但你的环境使用的是Java 8,无法识别Java 9的字节码(版本号53.0),因此抛出解析失败的错误。
解决方案
这里提供几个可行的解决办法,按推荐优先级排序:
1. 降级log4j-api到Java 8兼容的版本
log4j从2.9.0版本开始引入了多版本JAR支持,而2.8.2及之前的版本是纯Java 8兼容的,没有包含Java 9的类文件。你可以:
- 修改项目依赖,将
log4j-api的版本改为2.8.2 - 替换服务器lib目录中的
log4j-api-2.9.0.jar为log4j-api-2.8.2.jar - 重新构建EAR包,确保包内的依赖也同步更新
2. 确保EAR包中不重复包含log4j-api
你提到已经把log4j-api放在服务器lib目录,需要检查你的EAR包是否也打包了log4j-api-2.9.0.jar:
- 如果是Maven项目,在
pom.xml中对log4j-api依赖设置<scope>provided</scope>,这样打包时不会把它包含到EAR里 - 手动解压EAR包,检查
lib目录下是否有重复的log4j-api JAR,如有则删除
3. 配置WebLogic类加载器忽略Java 9版本的类
如果不想降级版本,可以通过修改WebLogic的部署描述符来过滤掉META-INF/versions/9下的类:
在你的EAR包的META-INF/weblogic-application.xml中添加以下配置:
<wls:application-param> <wls:param-name>weblogic.classloader.filterMultiReleaseJARs</wls:param-name> <wls:param-value>true</wls:param-value> </wls:application-param>
这个参数会让WebLogic的类加载器忽略多版本JAR中高于当前JDK版本的类文件,避免解析错误。
验证步骤
完成上述操作后:
- 清理WebLogic服务器的临时目录(就是错误中提到的
tmp/.appmergegen_1目录) - 重启WebLogic服务器
- 重新部署EAR包,检查错误是否消失
内容的提问来源于stack exchange,提问作者Hartej Singh Kathuria
相关产品推荐
相关产品推荐

