Uploaded image for project: 'Maven Assembly Plugin'
  1. Maven Assembly Plugin
  2. MASSEMBLY-992

Facility to define assembly descriptor in body of POM

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 3.7.0
    • None
    • None

    Description

      The Maven Assembly Plugin allows custom descriptors to be defined, but only in an external file. Please add the capability to define the descriptor in the body of the POM itself.

      Requiring a separate descriptor file makes it almost impossible to declare an assembly in a parent POM so that it can be inherited by child POMs. The documentation describe a way to share descriptors, but it is complex and doesn't obviously support Maven property interpolation.

      Without this facility, in order to easily inherit an assembly from a parent POM, I'm currently resorting to workaround involving AntRun to generate an assembly descriptor on the fly. See this pom.xml. It's pretty convoluted and tedious to get right. In addition, it has to be placed in a phase that is guaranteed to run before the execution of the Maven Assembly Plugin itself.

                <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId>
                  <executions>
                    <execution>
                      <!--
                        Generates an assembly descriptor for the binary distribution.
                      -->
                      <id>generate-bin-assembly-descriptor</id>
                      <phase>prepare-package</phase>
                      <goals>
                        <goal>run</goal>
                      </goals>
                      <configuration>
                        <skip>${_isSkipGenerateExe}</skip>
                        <target>
                          <echo file="${assemblyDirectory}/bin.xml" encoding="UTF-8">
                            <![CDATA[<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
        <id>bin</id>
        <formats>
          <format>tar.xz</format>
          <format>zip</format>
        </formats>
        <fileSets>
          <fileSet>
            <directory>${project.build.directory}</directory>
            <includes>
              <include>*-exe.jar</include>
            </includes>
            <outputDirectory>bin</outputDirectory>
          </fileSet>
          <fileSet>
            <directory>${binOutputDirectory}</directory>
            <outputDirectory>bin</outputDirectory>
            <!--
              Set access permissions to `-rwxrwxr-x`, which corresponds to adding `+x` to a created file.
              Manually setting permissions files in the archive is necessary for building on Windows,
              because input files will have lost attributes during the build process.
            -->
            <fileMode>0775</fileMode>
          </fileSet>
        </fileSets>
      </assembly>]]>
                          </echo>
                        </target>
                      </configuration>
                    </execution>
                  </executions>
                </plugin>
      

      This was requested and finally implemented for Versions Maven Plugin; see #258 and #684, along with Versions Maven Plugin rules that are inheritable on Stack Overflow.

      Attachments

        Issue Links

          Activity

            People

              sjaranowski Slawomir Jaranowski
              garretwilson Garret Wilson
              Votes:
              1 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: