Search code examples
javamavenfile-permissionstarmaven-assembly-plugin

Use Maven assembly plugin to set Linux file permissions even when run on other platforms?


Similar question: Can Ant's tar task set a Linux file permission even when the task is used on other platforms?

If I use Maven 2 assembly plugin with the 'project' descriptor, is there a way to set shell script permissions to executable for example for included build.sh script files?

Example:

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>project</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>

This will create three files

  • -project.tar.bz2
  • -project.tar.gz
  • -project-zip

And I would like to set the file permissions for all *.sh files which are in the tar files to 'executable'.


Solution

  • This can be done using the fileMode parameter available in Maven Assembly Plugin assembly descriptor. For instance

    <assembly>
        ...
        <fileSets>
            <fileSet>
                <directory>${project.build.directory}/bin</directory>
                <outputDirectory>/bin</outputDirectory>
                <includes>
                    <include>*.sh</include>
                </includes>
                <fileMode>0755</fileMode>
            </fileSet>
            ...
        </fileSets>
        ...
    </assembly>