[英]How to exclude a maven dependency if in the parent project exists a newer version of it
[英]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.