我有以下結構的多模塊Maven項目:如何使用Maven的聚集和繼承來收集子模塊罐子爲母公司的壓縮包
root module
module A
module B
module C
module C-1
module C-2
模塊C在這個項目是新的。其目標是爲子模塊C-1和C-2(即對其爲親本)和集合定義模塊C-1和C-2構建成單個焦油球的共享依存關係模塊的C target
目錄。
這個目標是實現:
- 根
pom.xml
列表模塊A,B,和C - 模塊C
pom.xml
列表模塊C-1和C-2,並聲明共享依賴性;它還聲明包裝爲「pom」 maven-assembly-plugin
在模塊C中用於查找其子目錄target
中的所有*.jar
文件並將它們打包到tgz中。
我在這個實現中遇到了一些問題。簡單的一個是C-1和C-2的自我依賴 - 它們從C繼承了它自己的依賴,因此拒絕編譯。我在C中使用dependencyManagement
來解決這個包裝依賴問題。看起來它工作正常。
我也對Assembly插件有問題。當在文件集值中使用通配符時,它會保留結果tar文件夾中的目錄結構,看起來你無法做任何事情。因此,具有模塊C的bin.xml
<fileSet>
<directory>${project.basedir}</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>**/*.jar</include>
</includes>
<excludes>
<exclude>**/*-javadoc.jar</exclude>
</excludes>
</fileSet>
結果按照壓縮包了一種具有結構
moduleC-version/moduleC-1/target/moduleC-1-version.jar
moduleC-version/moduleC-2/target/moduleC-2-version.jar
時,我只需要
moduleC-version/moduleC-1-version.jar
moduleC-version/moduleC-2-version.jar
歐凱,這不是太重要。主要問題是反應堆建造順序。無論我做什麼它導致
- 模塊A
- 模塊B
- 模塊C
- 模塊C-1
- 模塊C-2
這是因爲構建失敗在模塊C上抱怨
創建程序集失敗:創建程序集歸檔bin時出錯:您必須至少設置一個文件。 - > [Help 1]
我的理解是,問題出現在反應堆構建順序 - C-1和C-2應該在C之前構建 - 但我無法得到如何管理它有C父母給他們,並保持在模塊結構的頂部。
最重要的部分是有一個單獨的模塊(dist),它包含maven-assembly-plugin的配置。在那裏你需要定義你想要打包的所有模塊作爲依賴關係,以確保每個依賴項都是在模塊dist之前構建的。此外,使用像[this]這樣的描述符(https://github.com/khmarbaise/assembly-examples/blob/master/assemblies-with-reactor/dist/proj1-assembly.xml)和像[this]這樣的結構(https: //github.com/khmarbaise/assembly-examples/tree/master/assemblies-with-reactor)。 – khmarbaise
@khmarbaise謝謝,這是一個選項,爲什麼你不把它作爲答案在這裏?儘管在這個例子中看起來像dist/pom.xml並不需要顯式列出所有的依賴關係 - Reactor會尊重你列出模塊的順序,所以你只需要把dist放在最後並擺脫依賴關係。 –
我強烈建議將你想要打包的模塊定義爲'dist/pom.xml'中的依賴關係,否則,如果因爲任何原因(合併/更改/添加新模塊)而更改模塊的順序,則構建將失敗。 。 – khmarbaise