我正在使用maven产品,该产品使用版本v3.2.1的一些common-collection jar
,从我们的存储库下载。在整个项目中,我们使用的是ver1.1。现在我必须使用第三方jar,它使用common-collection
和v3.2.2,因为我得到NoClassDefFound
例外。
线程“main”
java.lang.NoClassDefFoundError
中的异常: 组织/阿帕奇/公地/集合/图/ ReferenceMap
我无法更改项目中的版本。如何解决这个问题?
答案 0 :(得分:1)
我无法更改项目中的版本,即v1.1
- 醇>
现在我必须使用与v3.2.2共同收集的第三方jar
你很难做出选择。更改(升级)项目中的版本,或者不使用第三方库。 (这假设第三方库的依赖性很难......如果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>