2010-08-08 119 views
2

我想弄清楚如何在多模塊項目中聚合我的maven依賴關係。舉例來說,如果我有:多模塊Maven項目中的聚合依賴關係

root pom/project1 
root pom/project2 

,我跑mvn dependency:copy-dependencies,我結束了在依賴關係:

root pom/project1/target/dependency 
root pom/project2/target/dependency 

我真正想要的是,如果我的根POM運行mvn命令文件夾中,將所有依賴關係複製到root pom/dependency。有沒有一個maven屬性可以讓我得到根目錄的輸出目錄? (類似於${project.build.directory})?我意識到,我可以在事實之後將所有依賴文件夾複製到同一個地方,但我希望有更清潔的東西。

回答

1

您必須配置依賴項插件才能將depdendencies複製到特定位置。這可以通過outputDirectory配置屬性完成。

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>copy-dependencies</id> 
     <phase>package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
       <outputDirectory>${outputDir}</outputDirectory> 
     </configuration> 
     </execution> 
    </executions> 
</plugin> 

但是,如果你想分配做到這一點,我建議你使用maven assembly plugin

的文檔創建裝配說:

大會插件的Maven 2.0的主要目的是允許用戶將 項目輸出及其依賴項,模塊,站點文檔和其他文件 合併到一個可分發的存檔中。

+0

謝謝!這看起來像我所需要的。 – Greg 2010-08-08 21:25:14

1

我真正想要的是,如果我在root pom文件夾中運行mvn命令,所有依賴將被複制到根目錄/依賴項。有沒有一個maven屬性可以讓我得到根目錄的輸出目錄? (類似於${project.build.directory})?

不,因爲模塊實際上不應該知道這一點。

我意識到我可以在事後將所有依賴文件夾複製到同一個地方,但我希望有一點清潔。

Maven的方式將使用Maven Assembly Plugina custom descriptor。但是,如果你不熟悉Maven Assembly Plugin及其描述符格式,這並不容易。

不乾淨但更簡單的方法是將Maven Dependency plugin配置爲使用相對路徑將依賴項複製到父項目中。事情是這樣的:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <outputDirectory>../root_pom/target/dependency</outputDirectory> 
    </configuration> 
</plugin> 

但正如我所說,這引入了模塊和根項目是一點都不好(我不會被包括在目標調用作爲構建的一部分走得更遠之間的緊耦合,模塊應該保持獨立,你應該能夠建立一個模塊,而不必「檢查」父母)。

+0

我打算嘗試彙編插件,謝謝! – Greg 2010-08-08 22:42:15

+0

@Greg你有沒有找到一種方法來使用程序集插件做到這一點? – herau 2014-06-06 12:54:18

+0

@herau我不記得我當時做了什麼來解決這個問題,但如果我再次用我在過去幾年中學到的知識來做這件事,我會使用程序集插件。您只需要在根級添加一個新的Maven模塊,您可以將其稱爲「程序集」或任何您想要的。你會包括所有其它模塊在組裝項目的POM文件,然後你的裝配描述符將包括類似的依賴關係: \t \t \t \t \t 運行 \t \t \t <輸出目錄>/ \t 這應該讓你關閉。 – Greg 2014-06-07 14:31:26

相關問題