TL; DR
我遇到了依赖管理问题。我想简化我的问题的描述,所以我不会发布NoClassDefFoundError的完整堆栈跟踪:.. VeryImportantStuff等。
简而言之,我使用2个依赖项: A-1.1 和 B-1.0 用于我的项目 C 。我无法使用 A 或 B 的其他版本。 B-1.0 取决于 A-1.0 。 A 的作者不尊重向后兼容性规则,A库的最新版本(1.1)根本没有类VeryImportantStuff.class
。
<dependency>
<groupId>org.thirdparty.lib</groupId>
<artifactId>A</artifactId>
<version>1.1</version> <!-- overrides B->A version !!! ((( -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.another.thirdparty.lib</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<scope>test</scope>
<!--
<dependencyManagement>
<dearMavenIbegYouPleaseUseThisDependency>
<dependency>
<groupId>org.thirdparty.lib</groupId>
<artifactId>A</artifactId>
<version>1.0</version> PLEASE!!!
</dependency>
</dearMavenIbegYouPleaseUseThisDependency>
</dependencyManagement>
-->
</dependency>
问题
如何告诉 B (或者我可以添加到我的pom.xml中)它应该使用A的1.0版本,而不是考虑到pom.xml中指定的1.1我的应用程序代码应该使用 A-1.1 ?
答案 0 :(得分:0)
只需向依赖项B
添加排除项,并告诉您不需要A
。然后添加A
版本1.1作为您的依赖项。
<dependency>
<groupId>org.another.thirdparty.lib</groupId>
<artifactId>B</artifactId>
<version>1.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.thirdparty.lib</groupId>
<artifactId>A</artifactId>
</exclusion>
</exclusions>
</dependency>