2010-09-14 19 views
5

我有一個分層的maven項目,我正在嘗試爲幾個子模塊構建本機安裝程序。我使用我的產品名稱作爲前綴:<finalName>xyz-${artifactId}</finalName>在父POM中,這樣我的所有工件罐都具有標準的命名約定。我需要實現所有依賴jar到一個目錄(因爲inno安裝程序對maven一無所知)。因此,對於這是一個安裝我打算使用Maven的組裝插件每個子模塊,然後使用類似在我的Inno Setup的如下:maven程序集會忽略從屬工件的finalName

Source: "target\pkg\lib\*.jar"; DestDir: "{app}\external"; Flags: ignoreversion; 

當我運行mvn clean package,我得到一個target/xyz-app1-bin/xyz-app1/lib目錄中所有的依賴罐子,但是,沒有我的兄弟項目產生的罐子都有其正確的最終名稱(如我的util-0.0.1-SNAPSHOT.jar代替xyz-util.jar

這個問題似乎類似於this post,但我不知道什麼是「附加」是(或許不建議使用)。

回答

3

我無法直接使用finalName,但是,我還是設法重新實​​現finalName邏輯我使用依賴集想要的 - 因此我分割成依賴外部和內部設置(基於的groupId):

<assembly> 
    <id>bin</id> 
    <formats> 
    <format>dir</format> 
    </formats> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>external</outputDirectory> 
     <outputFileNameMapping> 
     ${artifact.artifactId}.${artifact.extension} 
     </outputFileNameMapping> 
     <excludes> 
     <exclude>com.xyz:*</exclude> 
     </excludes> 
    </dependencySet> 

    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <outputFileNameMapping> 
     xyz-${artifact.artifactId}.${artifact.extension} 
     </outputFileNameMapping> 
     <includes> 
     <include>com.xyz:*</include> 
     </includes> 
    </dependencySet> 

    </dependencySets> 
</assembly> 
1

你應該能夠finalName直接使用使用(這個工作對我來說):

<outputFileNameMapping> 
    ${artifact.build.finalName}.${artifact.extension} 
</outputFileNameMapping>