我有以下问题 - 我正在尝试在我的项目(在 pom.xml 中定义)中使用 apache commons-lang version 2.6
但由于传递依赖性,maven 总是添加 version 3.2 .1 破坏了我的构建。
这是 pom.xml 的相关部分
<properties>
<commons-lang.version>2.6</commons-lang.version>
</properties>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons-lang.version}</version>
</dependency>
当我尝试运行 mvn dependency:tree
时,我可以看出原因是
+- org.seleniumhq.selenium:selenium-api:jar:2.26.0:compile (version managed from 2.26.0)
+- net.sourceforge.htmlunit:htmlunit:jar:2.10:compile
+- org.apache.commons:commons-lang3:jar:3.1:compile
所以我可以看到问题,但我真的不知道如何解决它。感谢您的任何建议:-)
最佳答案
研究在导致问题的依赖项中使用排除标记。排除标记告诉 maven 您不希望 maven 引入间接依赖关系,并且仅在这种情况下使用。
例如,如果我的一个依赖项 A 引入了 B 的 1.0 版,但我想改用 B 的 2.0 版,我可以这样做:
<dependency>
<groupId>org.mycorp</groupId>
<artifactID>A</artifactID>
<version>4.0</version>
<exclusions>
<exclusion>
<groupId>org.mycorp</groupId>
<artifactId>B</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mycorp</groupId>
<artifactID>B</artifactID>
<version>2.0</version>
</dependency>
exclusion 标签表示在这种情况下不引入间接依赖项 (B 1.0)。请注意,您不必提供版本。一旦您告诉 maven 不要自动引入 B 的那个版本,您将遵循一个明确的依赖关系来定义您确实需要哪个 B 版本(在本例中为 2.0 版)。
关于java - Maven 传递依赖中断构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13975036/