代码之家  ›  专栏  ›  技术社区  ›  Justin

maven程序集忽略依赖项目的finalName

  •  6
  • Justin  · 技术社区  · 14 年前

    我有一个层次化的maven项目,我正试图从中为几个子模块构建一个本机安装程序。我使用我的产品名称作为前缀: <finalName>xyz-${artifactId}</finalName>

    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安装程序对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 )

    this post ,但我不知道“attach”是什么(可能已弃用)。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Justin    14 年前

    我无法直接使用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>
    
        2
  •  1
  •   Felix L    11 年前

    您应该能够直接使用finalName使用(这对我很有用):

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