2012-10-25 20 views
12

我在庫p的父pom中定義了4.3版本,但是在由pom指定的項目模塊中,需要2.5版本的A。我面臨的問題是這兩個版本都被保留下來,因此我正在發生衝突。覆蓋在父pom中定義的庫版本

請告知如何解決問題。

+0

版本2.5是否需要您自己的代碼或某個插件或依賴項? –

+0

由依賴和代碼也。 – Rndm

回答

5

一般而言,建議在給定時間在類路徑中只有一個版本的依賴關係。這樣做可以讓你準確知道在運行時會使用哪個版本的類。

爲了避免版本衝突試圖指定這樣你的依賴:

<dependency> 
    <groupId>commons-daemon</groupId> 
    <artifactId>commons-daemon</artifactId> 
    <version>1.0.1</version> 
    <exclusions> 
     <exclusion> 
      <groupId>some_group</groupId> 
      <artifactId>some_artifact</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

,你需要用2.5版本規定相沖突的神器groupIdartifactId

+0

這是行不通的:( – Rndm

+0

@Rndm更具體一點,你做了什麼,爲什麼你認爲上述解決方案不起作用 –

+0

Thiks,找出了錯誤,你解釋的解決方案工作,謝謝 – Rndm

3

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

依賴調解 - 這決定了遇到的工件的多個版本時系統會使用的依賴版本。目前,Maven 2.0只支持使用「最接近的定義」,這意味着它將在依賴關係樹中使用最接近依賴項的版本。您可以通過在項目的POM中明確聲明版本來保證版本。請注意,如果兩個依賴版本在依賴關係樹中處於相同深度,直到Maven 2.0.8未定義哪一個會獲勝,但是自Maven 2.0.9以來,它是聲明中的順序:第一個聲明獲勝。

  • 「最接近的定義」意味着所使用的版本將是依賴關係樹中與您的項目最接近的版本,例如。如果將A,B和C的依賴關係定義爲A→B→C→D 2.0和A→E→D 1.0,則在構建A時將使用D 1.0,因爲從A到D的路徑通過E更短。你可以明確地添加一個依賴於d 2.0 A至強制使用d 2.0

這聽起來像一個2.5版正在被另一個依賴傳遞地包括在內。這使得版本4.3和2.5的長度相同。

  • 項目 - >父 - > 4.3
  • 項目 - >相關 - > 2.5

通過在項目中明確規​​定2.5的依賴它就會成爲最近和覆蓋任何其他版本。