2010-09-14 54 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>