6

我有一个分层的 maven 项目,我试图从中为几个子模块构建一个本机安装程序。我使用我的产品名称作为前缀:<finalName>xyz-${artifactId}</finalName>在父 POM 中,以便我所有的工件 jar 都具有标准命名约定。

xyz-parent
 +-- util
      +--- target/xyz-util.jar
 +-- core
      +--- target/xyz-core.jar
 +-- app1 <--- "builds an installer as part of the package phase"
      +--- target/xyz-app1.jar
 +-- app2 <--- "builds an installer as part of the package phase"
      ...

我需要将所有依赖的 jar 物化到一个目录中(因为 inno setup 对 maven 一无所知)。因此,对于作为安装程序的每个子模块,我计划使用 maven-assembly-plugin,然后在我的 inno 设置中使用类似以下内容:

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

当我运行时mvn clean package,我得到一个target/xyz-app1-bin/xyz-app1/lib包含所有依赖 jar 的目录,但是我的兄弟项目生成的所有 jar 都没有正确的最终名称(例如,我有util-0.0.1-SNAPSHOT.jar而不是xyz-util.jar

这个问题似乎与这篇文章类似,但我不知道“附加”是什么(可能已弃用)。

4

2 回答 2

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>
于 2010-09-14T21:10:23.813 回答
1

您应该可以使用 finalName 直接使用(这对我有用):

<outputFileNameMapping>
    ${artifact.build.finalName}.${artifact.extension}
</outputFileNameMapping>
于 2013-11-06T14:49:45.017 回答