解决jar包冲突教程,使用maven Helper插件

最近同事给我推荐了一个开源的excel解析工具EasyPOI ,maven 如下:

                 

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.2.0</version>
</dependency>

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-base</artifactId>
    <version>4.2.0</version>
</dependency>

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-web</artifactId>
    <version>4.2.0</version>
</dependency>

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-annotation</artifactId>
    <version>4.2.0</version>
</dependency>

     在引用的过程中与项目中的几处jar存在了jar包冲突,让我有机会可以总结一下排查jar包冲突的方法。

 

首先推荐一个idea 中的maven的插件 maven Helper 。用来查看项目项目中的jar包冲突。 下面的排查过程都会用到。在idea->file->settings->plugins 中 下载。下载成功之后需要重启。

1、第一个冲突:运行程序报错。java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Cell.getCellType()Lorg/apache/poi/ss/usermodel/CellType;

从报错中可以看出是Cell类中的一个方法没有找到,这种error一般都是因为jar包冲突引起的,因为引入了不同版本的jar包,而多个版本中 Cell类的实现方式不一样。导致的错误。

接下来使用ctrl+n 来查看Cell这个类是哪个jar包下的。

通过查询,我发现Cell这个类是Apache的POI这个jar包中的,并且当前的版本是3.17,接来下我来看看 我的项目需要哪些版本的POI.通过mavenHelper 来查看。

在项目的pom文件下面会找到这个页面。点进去就可以查到项目中所有依赖的jar包和他们的版本。

 

在这里冲突conflicts这里,我发现poi的jar包确实冲突了。

我的项目中依赖的poi是3.17版本的和在上图中看到的是一样的,我easypoi需要的poi是4.1.1版本的,所以我只能将poi升级。在pom文件中显示的引入poi4.1.1

在项目中引入下面的依赖之后点reimport:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>

还是存在冲突,这时我有两种选择,<exclude>两个jar包中的POI ,或者在父工程当中<dependencyManagement> 一下项目中poi 的版本,我选择后者。

在父pom文件中加入下面的依赖,点一下reimport,发现项目中的poi版本都固定成了4.1.1,并且在冲突conflicts中找不到poi的冲突了。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.1</version>
        </dependency>
    </dependencies>
</dependencyManagement>

 

我重新运行一下测试用例:

2、编译错误:HSSFCell.CELL_TYPE_STRING  这个常亮在jar包升级中被删除了,我只能换一种新的写法CellType.STRING,替换之后再运行。

 

3、再次运行出现,运行时异常:java.io.IOException: org/apache/commons/compress/utils/InputStreamStatistics

这次ctrl+n搜索 org/apache/commons/compress/utils/InputStreamStatistics 没有查找,我选择搜索org/apache/commons/compress/utils,发现有结果,问题出现在commons-compress 这个jar包中,我用的是1.8.1版本。

使用maven Helper 查询是否存在冲突,果然存在两个冲突。 <poi>4.1.1 需要使用 1.19 版本的<commons-compress>。

在当前1.8.1版本右键点击jump to source ,

接下来升级commons-compress 到1.19版本,回调插件reimport之后发现还是存在冲突。

剩下的1.18的旧版本,我选择<exclude>,在1.18 上右键点击exclude。之后再reimport 一下,

会发现1.18版本的自动被排除了。jar包冲突也没有了。

4、再次运行程序,运行异常:org.apache.poi.ooxml.POIXMLException: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;

这次我还是ctrl+n 查找org.apache.xmlbeans.XmlOptions  。只有一个jar包 xmlbeans 2.3.0

在插件中搜一下:xmlbeans,果然冲突,我的当前版本是2.3.0,  <poi> 4.1.1  中需要的<xmlbeans> 是3.1.0 ,直接把2.3.0 排掉。reimport

 

xmlbeans冲突解决了。再次运行程序。程序运行成功了,excel文件被成功解析。jar包冲突的问题解决了。!!!!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值