java - Maven 传递依赖中断构建

标签 java maven build

我有以下问题 - 我正在尝试在我的项目(在 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/

相关文章:

java - 当整个 Maven 项目在 junit 测试下运行时,logger.info 抛出空指针异常

eclipse - JUnit5 测试在 maven 上工作正常,但在通过 Eclipse 运行时不行, "No tests found with test runner ' JUnit 5'."

ios - 在 rake build 期间安装 ios-sim 1.9.0 在预安装时失败

Java 从数组中获取范围

java - 为什么要绑定(bind)socket

java - 在 OSGi Bundle 中使用 JavaCompiler

java - 如何运行已编译的java项目

maven - Jenkins 从错误的路径执行 Maven

ant - 我可以在 Ant build.xml 中指定要编译的 JDK 路径吗?

deployment - Jenkins-将构建推广到不同的环境