2017-04-12 110 views
1

有一個dep庫我的項目的模塊之一(module1)依賴於。依賴關係在父級的dependencyManagement部分中聲明。如何使用父項目中隱式管理的傳遞依賴項?

... 
<groupId>group1</groupId> 
<artifactId>parent-proj</artifactId> 
... 
<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>group2</groupId> 
      <artifactId>dep</artifactId> 
      <version>1</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
... 


... 
<parent> 
    <groupId>group1</groupId> 
    <artifactId>parent-proj</artifactId> 
    ... 
</parent> 
<artifactId>module1</artifactId> 
... 
<dependencies> 
     <dependency> 
      <groupId>group2</groupId> 
      <artifactId>dep</artifactId> 
     </dependency> 
</dependencies> 
... 

dep又取決於subdep,我想在另一個模塊(module2)的依賴關係,使用來自相同parent-proj繼承。重點是使module2使用相同版本的subdepdep取決於沒有明確聲明我的項目中的版本。然而,當我嘗試添加上subdep的依賴到module2的Maven不知道是什麼版本的subdep必須使用:

... 
<parent> 
    <groupId>group1</groupId> 
    <artifactId>parent-proj</artifactId> 
    ... 
</parent> 
<artifactId>module2</artifactId> 
... 
<dependencies> 
     <dependency> 
      <groupId>group2</groupId> 
      <artifactId>subdep</artifactId> 
     </dependency> 
</dependencies> 
... 
module2$ mvn dependency:tree 
... 
[ERROR]  'dependencies.dependency.version' for group2:subdep:jar is missing 
... 

是否有子項目傳遞依賴使用方式在父項目中隱式管理?

回答

1

由於dependencyManagement只定義約束(如版本),而不是真正的dependencies,爲什麼不把版本對齊放在共享父pom中?

更新依賴版本可能會讓人覺得奇怪,但是如果您沒有時間找到原因或實際解決問題,那麼如何解決失敗的構建問題。

dep所有者可以升級有關subdep其版本的依賴,即使沒有讓你通過dep版本增量知道。你構建得不可重現。

如果您的模塊依賴於版本1的subdep的API,那麼您通常希望對版本2執行「受控遷移」。如果沒有任何更改,也許沒有理由在第一個版本中增加版本號地點。

爲了減輕疼痛,我建議看看到Maven版本插件:

有關如何告訴Maven來「只使用最新的」的討論,參見:

+0

因爲如果我決定切換到'dep'的版本2,這取決於'subdep'的更新版本,這樣'subdep'的顯式定義的版本將會覆蓋'dep' v.2依賴樹中'subdep'的版本。因此,每次更改「dep」版本時,都必須手動重新對齊顯式定義。 – vect

+0

@vect我已經更新了我的答案。 「 –

+0

」dep的所有者可能會升級其對subdep的版本依賴關係,即使不通過dep的版本增量讓您知道,您的構建也將無法重現。「 - 另一方面,在'dependencyManagement'中覆蓋'subdep'的一個版本我可能會冒一個錯誤的版本,因爲它不包含'dep'所需的'subdep'版本。而且由於構建時沒有錯誤,只有在集成測試或運行時纔會發現構建的不一致性。 – vect

相關問題