簡體   English   中英

在Maven項目中添加現有依賴項的較新版本

[英]Adding a newer version of existing dependency in Maven project

供您參考,我是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依賴項。 因此,結果依賴性層次結構如下所示。

依賴層次

我認為我的代碼引用的是“ 4.2.1”版本,而不是“ 4.3.6”版本。 如何為Java文件分配“ 4.3.6”版本? 是否可以通過為代碼添加httpclient:4.3.6來保留項目的現有依賴關系?

這將從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>

Maven使用“距離”度量來確定要使用哪個依賴項。 該度量標准是每個pom.xml的第一步(您pom.xml中的依賴關系為1,對該依賴項的pom的依賴關系為2,依此類推),並且包括一個更近的距離,因此,如果在pom.xml中包含a版本,這就是所使用的。

相同的依賴項(相同的groupId和artifactId)不能與兩個不同的版本一起使用,因此您不能保留依賴項的依賴項並包含它們的另一個版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM