由于不同版本的jar

时间:2016-08-23 06:38:08

标签: java maven exception pom.xml

我正在使用maven产品,该产品使用版本v3.2.1的一些common-collection jar,从我们的存储库下载。在整个项目中,我们使用的是ver1.1。现在我必须使用第三方jar,它使用common-collection和v3.2.2,因为我得到NoClassDefFound例外。

  

线程“main”java.lang.NoClassDefFoundError中的异常:   组织/阿帕奇/公地/集合/图/ ReferenceMap

我无法更改项目中的版本。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

  
      
  1. 我无法更改项目中的版本,即v1.1

  2.   
  3. 现在我必须使用与v3.2.2共同收集的第三方jar

  4.   

你很难做出选择。更改(升级)项目中的版本,或者不使用第三方库。 (这假设第三方库的依赖性很难......如果API类已被移动,似乎很可能等等。)

第一种选择可能更好。你使用过时版本的commons-collection库的时间越长,你遇到的问题就越多。

实际上,有第三种可能性,但它却在寻找麻烦。您可以尝试构建自己的commons-collection版本,该版本与v1.1和v3.2.2兼容。但问题出在这里:

  • 您正在购买维护此自定义版本的commons-collection的额外工作,只要您在代码库中需要它。 (如果您的代码版本存在很长时间,那可能需要很长时间;例如,如果它们发布给有长期支持要求的客户。)

  • 它可能无效。假设代码的一部分在一个包中需要ReferenceMap,另一部分在另一个包中需要它。

另一种可能性(另一个坏主意!)可能是用类加载器做一些棘手的事情,但这也可能导致问题。如果同一类的两个版本由不同的类加载器加载到应用程序中,则类型系统将坚持它们是不同的类型。他们不会兼容任务。类型转换会意外失败,等等。

答案 1 :(得分:0)

似乎已被移至

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.1</version>
</dependency>