Gradle引入Apache POI依赖时的重复类错误及类缺失问题
解决Apache POI依赖冲突与类缺失问题
问题根源
org.apache.poi:poi-ooxml:5.2.3依赖精简版OOXML Schema包(poi-ooxml-lite),仅包含常用类,缺少CTLevelSuffix、STLevelSuffix这类小众schema类org.apache.poi:poi-ooxml-full:5.2.3包含完整的OOXML Schema,但同时引入两个依赖时,poi-ooxml自带的lite版schema会和full版的完整schema类重复,触发冲突- 单独使用
poi-ooxml-full时找不到XWPF类,大多是Gradle依赖同步不彻底或传递依赖未正确加载导致
解决方案
1. 清理依赖,仅保留完整包
修改build.gradle(:app)的依赖块,移除poi-ooxml,只保留poi-ooxml-full:
dependencies { // 保留原有其他依赖 androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation 'com.github.bumptech.glide:glide:4.13.1' implementation 'com.github.Gavras:MultiLineRadioGroup:v1.0.0.6' // 仅保留完整POI OOXML依赖 implementation 'org.apache.poi:poi-ooxml-full:5.2.3' }
2. 强制同步并重建项目
- 点击Android Studio右上角的「Sync Project with Gradle Files」按钮,完成依赖同步
- 执行「Build > Clean Project」,再执行「Build > Rebuild Project」,确保旧依赖缓存被清除
3. 验证导入
此时应该能正常导入所有需要的类:
// XWPF相关类 import org.apache.poi.xwpf.usermodel.XWPFAbstractNum; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFNumbering; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; // Schema相关类(包括之前缺失的两个) import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLevelSuffix; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLevelSuffix;
额外处理(若遇到方法数超限)
Apache POI依赖包体积较大,可能触发Android的65536方法数限制,需开启Multidex:
在build.gradle(:app)的android块中添加配置:
android { defaultConfig { // 其他原有配置 multiDexEnabled true } } dependencies { // 添加Multidex依赖 implementation 'androidx.multidex:multidex:2.0.1' }
内容的提问来源于stack exchange,提问作者CorMatt
相关产品推荐
相关产品推荐

