java.lang.IncompatibleClassChangeError 错误通常发生在尝试加载一个与编译时使用的类库版本不兼容的类库版本时。具体到这个错误,它表示在运行时遇到了一个接口的改变,这个改变不兼容于编译时期间所期待的接口。
在你提供的错误信息中,org.apache.poi.util 接口可能被修改了,导致与你的项目依赖的 Apache POI 库版本不匹配。
解决方法:
确认项目依赖的 Apache POI 库的版本是否与编译时期间使用的版本一致。如果不一致,需要更新项目中的 Apache POI 依赖,使其与运行时环境中使用的库版本相匹配。
如果你是在升级项目依赖时遇到这个错误,可能需要查看 Apache POI 的更新日志,了解接口 org.apache.poi.util 是如何变化的,并根据更新日志进行相应的代码调整。
清除并更新项目的构建路径,确保所有的类都是基于最新的依赖进行编译的。
如果你是在一个大型项目中遇到这个问题,确保整个项目组织中所有的开发环境都使用相同版本的 Apache POI 库。
如果可能的话,可以尝试回退到一个稳定且兼容的 Apache POI 版本,然后再逐步升级到出现问题的版本。
如果你是使用构建工具(如 Maven 或 Gradle),使用其依赖管理功能来自动处理依赖的版本。
我的问题是版本不一致问题:找到pom依赖中poi相关jar包版本,如
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
<scope>compile</scope>
</dependency>
改为:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
<scope>compile</scope>
</dependency>
重新发包运行即可