POI依赖报错:org.apache.poi.hssf.usermodel包多模块可访问求排查
解决POI模块访问冲突问题
老哥,这个问题我之前帮人排查过好多次,本质是Java模块系统(JPMS)的重复包冲突,给你拆解下原因和解决办法:
问题根源
你把poi.jar和poi-examples.jar都加到了模块路径里,但这两个JAR包都包含了org.apache.poi.hssf.usermodel这个包——poi-examples是POI的示例代码包,它本身依赖核心的poi.jar,还重复打包了核心包的部分类,导致Java模块系统不知道该优先加载哪个模块里的这个包,所以抛出了这个错误。
具体解决步骤
- 移除多余的依赖包:直接从你的模块路径里删掉
poi-examples.jar,业务代码完全不需要这个示例包,留着只会添乱。 - 检查核心依赖完整性:确保你的模块路径里只保留必要的POI核心依赖,比如:
poi.jar(处理xls格式的核心包)- 如果需要处理xlsx,还要加
poi-ooxml.jar - 配套的依赖包(比如
commons-codec.jar、commons-collections4.jar这类,根据POI版本要求添加)
- 清理IDE缓存并同步:有时候IDE会缓存旧的依赖状态,比如IntelliJ可以通过
File -> Invalidate Caches / Restart清理,Eclipse可以用Project -> Clean,之后重新同步项目依赖。 - 如果用构建工具(Maven/Gradle):检查你的依赖配置,确保只引入核心的
poi依赖,不要误加poi-examples。比如Maven的正确依赖配置应该是:<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>你的POI版本号</version> </dependency>
按照上面的步骤操作,应该就能解决这个冲突问题了。
内容的提问来源于stack exchange,提问作者Hima




