Weblogic环境下升级Apache POI至5.0.0后生成Excel报错求助
问题根源
Weblogic服务器自带旧版本的xmlbeans类库,与POI 5.0.0依赖的新版本xmlbeans(3.x系列)存在类加载冲突,导致org.apache.poi.xssf.model.SharedStringsTable无法正常初始化。
具体解决步骤
1. 配置Weblogic类加载优先级(核心方案)
在项目WEB-INF/weblogic.xml中添加配置,强制Weblogic优先加载应用自身的依赖包,而非服务器自带的旧版本:
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>org.apache.xmlbeans.*</package-name> <package-name>org.apache.poi.*</package-name> <package-name>org.openxmlformats.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>
该配置会让Weblogic优先加载应用WEB-INF/lib目录下的上述包类,彻底规避服务器自带库的冲突。
2. 确保依赖版本兼容且无冲突
在build.gradle中显式指定POI依赖的xmlbeans版本,并排除可能的重复依赖:
// POI核心依赖 implementation('org.apache.poi:poi:5.0.0') { exclude group: 'xml-apis', module: 'xml-apis' } // POI OOXML依赖 implementation('org.apache.poi:poi-ooxml:5.0.0') { exclude group: 'xmlbeans', module: 'xmlbeans' } // 显式引入POI 5.0.0兼容的xmlbeans版本 implementation 'org.apache.xmlbeans:xmlbeans:3.1.0'
POI 5.x系列依赖xmlbeans 3.x版本,显式引入可避免依赖传递带来的版本不一致问题。
3. 清理Weblogic缓存并重启服务器
Weblogic的临时缓存可能残留旧类文件,导致新依赖无法生效:
- 停止Weblogic服务
- 删除服务器domain目录下的
tmp和cache文件夹 - 重启Weblogic后重新部署应用
4. 验证应用打包完整性
检查生成的war包,确保WEB-INF/lib目录下包含以下关键jar包:
poi-5.0.0.jarpoi-ooxml-5.0.0.jarxmlbeans-3.1.0.jarpoi-ooxml-schemas-4.1.2.jar(POI 5.0.0依赖的OOXML schema包)
内容的提问来源于stack exchange,提问作者vcima
相关产品推荐
相关产品推荐

