Search code examples
maven-2archivemaven-assembly-plugin

Creating a tar.gz archive with Maven


I have a Maven project, where under src/main directory there is a sub dir called output. this folder needs to be packaged into tar.gz. when using the assembly plugin as follows:

From the pom.xml:

<build>
<finalName>front</finalName>
<plugins>
    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-5</version>
    <configuration>
      <descriptors>
        <descriptor>src/main/assembly/assembly.xml</descriptor>
      </descriptors>
    </configuration>
  </plugin>
  </plugins>
</build>

the assembly.xml:

<assembly>
    <id>bundle</id> 
    <formats>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>src/main/output</directory>
        </fileSet>
</fileSets>
</assembly>

My problem is that I am trying the outcome will be as running the tar utility itself, meaning when extracting to get output directory and all its content. what I get is the output folder wrapped with all the project path - name/src/main/output.


Solution

  • You need to configure the assembly descriptor to not include the base directory and to configure an output directory for the fileSet:

    <assembly>
      <id>bundle</id>
      <formats>
        <format>tar.gz</format>
      </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
      <fileSets>
        <fileSet>
          <directory>src/main/output</directory>
          <outputDirectory>output</outputDirectory>
        </fileSet>
      </fileSets>
    </assembly>
    

    With the above assembly descriptor, I get the following result (when running on a project reproducing the structure):

    $ mvn clean assembly:assembly
    ...
    $ cd target
    $ tar zxvf Q3330855-1.0-SNAPSHOT-bundle.tar.gz 
    output/
    output/hello.txt
    

    See also