2014-09-29 57 views
0

我有一個插件管理配置插件P的maven項目A。我有一個單獨的maven項目B而不依賴插件P。項目A不是項目B的母公司。我的第三個項目C的父項目是A使用插件P如何避免將不相關的maven插件添加到子項目?

A (pluginManagement P) 
|- B 
|- C (plugin P) 

當我嘗試從插件P項目A運行的目標時,Maven試圖執行目標項目B以及和失敗。

[錯誤]無插件在當前項目 和插件組發現前綴「P」 [org.apache.maven.plugins,org.codehaus.mojo] 可以從庫[本地] - > [求助1]

但是,如果我添加一個插件P項目B的插件依賴性,一切正常。

A (pluginManagement P) 
|- B (pluginManagement P) 
|- C (plugin P) 

有沒有辦法避免這種依賴傳播?看來我做錯了什麼。

回答

0

經過一番研究,似乎有兩種Maven方法可以做到這一點。爲了清楚起見,假設有另一個項目D也使用插件P,插件P配置爲配置PC,並且該插件P具有目標G

其下創建一個額外的聚合POM不具有pluginManagement P和聚合項目B

Alpha 
|- A (pluginManagement P [PC]) 
    |- C (plugin P) 
    |- D (plugin P) 
|- B 

不要在使用它的項目中使用pluginManagement P和硬編碼P的配置PC

A 
|- B 
|- C (plugin P [PC]) 
|- D (plugin P [PC]) 

創建一個單獨的聚合器POM似乎是最好的解決方案。但是,對我來說,有一種更簡單的解決方案,可以減少流失。我可以簡單地直接調用P的目標項目C像這樣:

mvn -pl :C P:G 

這讓行家反應器洞察我的整個項目結構,而不傳播到目標的A所有模塊。

3
  1. 在頂層使用pluginManagement,而不是插件,然後將plugin子句放在需要的地方。
  2. (或)集合繼承爲false。
+0

我已經在頂層使用'pluginManagement'。將'inherited'設置爲'false'工作。 – 2014-09-30 23:38:03

相關問題