Sharing Assembly Descriptors

So you have created an assembly descriptor that you feel is so good that you want to share it between several of your projects. The simplest way to solve this problem is to create a separate project for your assembly descriptor. Let's call the project my-assembly-descriptor.

The Shared Assembly Descriptor Project

Here's what the directory structure for that project looks like:

my-assembly-descriptor
    +-- src
    |   `-- main
    |       `-- resources
    |           `-- assemblies
    |               `-- myassembly.xml
    `-- pom.xml

There are just two files in this project: your assembly descriptor myassembly.xml and a pom.xml.

First let's check out the POM for the Shared Assembly Descriptor Project. It is quite simple:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>your.group.id</groupId>
  <artifactId>my-assembly-descriptor</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Shared Assembly Descriptor</name>
</project>

Next let's look at our shared assembly descriptor. This is just an example. Replace it with the assembly descriptor you want to share.

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>my-assembly-descriptor-id</id>
  <formats>
    <format>jar</format>
  </formats>
  <fileSets>
    <fileSet>
      <includes>
        <include>pom.xml</include>
      </includes>
      <useDefaultExcludes>true</useDefaultExcludes>
    </fileSet>
    <fileSet>
      <directory>src</directory>
      <useDefaultExcludes>true</useDefaultExcludes>
    </fileSet>
  </fileSets>
</assembly>

Run 'mvn install' on this project to install the Shared Assembly Descriptor project into your local repository.

The Project Using the Shared Assembly Descriptor

In the project that wants to use our Shared Assembly Descriptor, you need to add my-assembly-descriptor as a dependency on the Assembly Plugin. This makes our assembly descriptor available for the Assembly Plugin to use.

<project>
  <groupId>your.group.id</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0-SNAPSHOT</version>
  <modelVersion>4.0.0</modelVersion>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2</version>
        <dependencies>
          <dependency>
            <groupId>your.group.id</groupId>
            <artifactId>my-assembly-descriptor</artifactId>
            <version>1.0-SNAPSHOT</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <!-- This is where we use our shared assembly descriptor -->
              <descriptors>
                <descriptor>myassembly.xml</descriptor>
              </descriptors>
            </configuration>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>