2011-12-28 83 views
4

我有一個項目,其中maven-enforcer規則失敗,使用非獨特的快照(這是令人討厭的唯一類型的快照在Maven 3中支持)的多模塊構建。Maven獨特的快照和依賴關係融合

例如,假設 - >是 「依賴」 關係,並且:

  1. 模塊-A - >模塊-B - >模塊-C
  2. 模塊-A - >模塊-C

並且模塊B和模塊C作爲唯一構建存在於快照存儲庫中。所有在POM中聲明的模塊版本都是1.0-SNAPSHOT。現在

,構建模塊A失敗:

mvn -pl Module-A install

結果:

[INFO] --- maven-enforcer-plugin:1.0.1:enforce (enforce) @ Module-A --- 
[ERROR] 
Dependency convergence error for com.vivosys.project:Module-C:1.0-SNAPSHOT paths to dependency are: 
+-com.vivosys.project:Module-A:1.0-SNAPSHOT 
    +-com.vivosys.project:Module-B:1.0-20111228.032527-8 
    +-com.vivosys.project:Module-C:1.0-SNAPSHOT 
and 
+-com.vivosys.project:Module-A:1.0-SNAPSHOT 
    +-com.vivosys.project:Module-C:1.0-20111228.032527-6 

的傳遞依賴被解析爲一個非唯一快照生成,而是直接依賴性被解析爲一個獨特的快照構建。

我正在使用maven 3.0.3,maven-enforcer 1.0.1。存儲庫是使用獨特快照選項的Artifactory 2.4.2(由於Maven 3不再支持非唯一快照,因此Artifactory建議使用該選項)。

解決方案?

更新:看起來像artifactory允許覆蓋maven客戶端行爲並將非唯一快照存儲在存儲庫中。然而,出於某種原因,Artifactory不建議這樣做(請參閱http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories上的「Maven 3」blurb),所以其他解決方案仍然受歡迎。

回答

2

您擊中了this執行者插件錯誤(提升爲增強)。

也許,嚴格地說,作爲一種解決方法,您可以顯式聲明傳遞依賴項C作爲A的依賴項?

+0

感謝您提供錯誤報告的鏈接。請注意,模塊B和C *都已明確聲明爲A的依賴關係。實際上,這是導致收斂失敗的原因。 – Raman 2011-12-29 18:11:04

1

可用,直到MENFORCER-118解決的唯一辦法似乎是配置資源庫服務器使用非唯一snaphots。在Artifactory中,可以通過以下方式完成此操作:Admin, Repositories,選擇快照庫並選擇Edit。然後在Maven Snapshot Version Behavior下選擇Nonunique