在Maven项目中添加更新版本的现有依赖项

时间:2015-01-19 15:34:19

标签: java maven

为了您的信息,我是Maven环境的新手,并且不熟悉Java开发。

首先,我写了一个使用org.apache.httpcomponents:httpclient:4.3.6的项目。它运行良好,完全没有问题。我将源代码(Java文件)放入另一个使用Maven配置的Eclipse Web项目中。所以我在pom.xml中添加了一个依赖项,并且它已成功编译。但是当我运行它时出现了一个问题。它说java.lang.NoSuchFieldError。经过多次尝试并失败后,我得出结论,这是由版本问题引起的。

pom.xml中的依赖关系:

<dependencies>
    <dependency>
        <groupId>net.generalsvc</groupId>
        <artifactId>ubi.base.bin</artifactId>
        <version>2.1.0-SNAPSHOT</version>
    </dependency>
    ...
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.6</version>
    </dependency>
</dependencies>

net.generalsvc:ubi.base.bin包含org.apache.http:httpclient:4.2.1的依赖关系。所以结果依赖层次结构如下所示。

Dependency Hierarchy

我认为我的代码是引用'4.2.1'版本而不是'4.3.6'版本。如何将“4.3.6”版本分配给我的Java文件?我可以通过为我的代码添加httpclient:4.3.6来保留项目现有的依赖性吗?

2 个答案:

答案 0 :(得分:1)

这将从maven构建中排除特定

<dependency>
    <groupId>net.generalsvc</groupId>
    <artifactId>ubi.base.bin</artifactId>
    <version>2.1.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.http</groupId>
            <artifactId>httpclient</artifactId>
        </exclusion>
    </exclusions>
</dependency>

答案 1 :(得分:1)

Maven使用“距离”度量来决定使用哪个依赖项。该度量是每个pom.xml的一步(pom.xml中的依赖项为1,依赖于这些依赖项的pom是2,等等),并且包含的​​更近,所以如果你在pom.xml中包含一个版本,这是正在使用的。

相同的依赖项(相同的groupId和artifactId)不能与两个不同的版本一起使用,因此您无法保留依赖项的依赖项并包含其他版本。