2016-11-06 51 views
0

我有兩個模式的項目如下:模塊如何依賴於沒有冗餘依賴性的陰影罐?

項目

- 模塊1(陰影罐子,取決於LIB A,B)

- 模塊2(戰爭)

單詞數取決於module1。然後將module1打包到帶有Maven遮罩插件的陰影罐子中。 Module2打包成一場依賴於module1的戰爭。

當我嘗試執行mvn包時,它會產生一個包含着色jar的戰爭,但也包含色調罐依賴的相關庫(A,B)。

這很奇怪。我怎樣才能讓戰爭只包含陰影的jar而不是依賴庫?任何建議,謝謝。

回答

0

問題是,Maven不知道module1已被陰影。當它試圖解決module2的依賴關係時,它會查看module1的POM並查看其所有依賴關係,隨後將其包含在module2的WAR文件中。

您可以通過三種不同的方式解決這個問題:

  • 不要遮陽module1。你沒有說明爲什麼你需要這樣做,但如果你能避免它,這是我會建議。
  • 當指定module1作爲依賴於module2,排除其所有依賴:

像這樣:

<dependency> 
    <groupId>...</groupId> 
    <artifactId>module1</artifactId> 
    <version>${project.version}</version> 
    <exclusions> 
    <exclusion> 
    <!-- 
     Pre-Maven 3.2.1: Repeat groupId and artifactId for all 
     direct dependencies of module1. 

     Maven 3.2.1 and onwards: substitute the '...' below with '*' 
    --> 
     <groupId>...</groupId> 
     <artifactId>...</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 
  • 引入一個附加的Maven組件module1並應用排除欺騙的上方。我只是試過這個,它爲我工作。根據我的經驗,當依賴於定製的「捆綁」時,裝配往往比陰影工件更可靠。然後你根本不需要做陰影。
+0

是的,我排除所有的庫時module2依賴於module1。但它會導致編譯問題(類未找到排除原因)。我認爲在戰爭包裝階段除去庫存會更好。 –

+0

如果我用分類器製作了一個附着的陰影罐,而module2取決於陰影罐? @Daniel –

+0

Module1是陰影的,因爲它是一個hadoop作業模塊,其中包含module2需要執行的所有hadoop作業。我製作了一個有所有依賴關係的胖子,以避免在沒有發現異常的類上提交紗線工作。 –