Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

maven assembly ignores finalName for dependent artifacts

I have a hierarchical maven project, from which I am trying to build a native installer for several of the sub-modules. I am using my product name as a prefix: <finalName>xyz-${artifactId}</finalName> in the parent POM so that all my artifact jars have a standard naming convention.

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"
      ...

I need to materialize all the dependent jars into a directory (since inno setup knows nothing about maven). So for each submodule which is an installer I plan to use maven-assembly-plugin, then use something like the following in my inno setup:

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

When I run mvn clean package, I get a target/xyz-app1-bin/xyz-app1/lib directory with all of the dependent jars, however none of the jars produced by my sibling projects have their correct final names (e.g. I have util-0.0.1-SNAPSHOT.jar instead of xyz-util.jar)

This problem seems similar to this post, but I have no idea what "attach" is (perhaps deprecated).

like image 860
Justin Avatar asked Sep 14 '10 19:09

Justin


2 Answers

I was unable to use finalName directly, however, I did manage to re-implement the finalName logic I wanted using dependency sets -- thus partitioning my dependencies into an external and internal set (based on the 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>
like image 191
Justin Avatar answered Nov 12 '22 02:11

Justin


You should be able to use finalName directly using (this worked for me) :

<outputFileNameMapping>
    ${artifact.build.finalName}.${artifact.extension}
</outputFileNameMapping>
like image 1
Felix L Avatar answered Nov 12 '22 02:11

Felix L