<?xml version="1.0"?>

<!--
  ~ Copyright 2006 The Apache Software Foundation.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<!--
  Since Modello does not have the capability to share descriptor,
  if you make changes to FileSet, FileItem, DependendencySet, or
  adding new collection, make sure to propagate your changes
  to "assembly-component.mdo".
-->

<model xmlns="http://codehaus-plexus.github.io/MODELLO/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/1.8.0 http://codehaus-plexus.github.io/modello/xsd/modello-1.8.0.xsd"
       xml.namespace="http://maven.apache.org/ASSEMBLY/${version}"
       xml.schemaLocation="http://maven.apache.org/xsd/assembly-${version}.xsd">

  <id>assembly</id>
  <name>Assembly</name>
  <description>
    <![CDATA[
    <p>
    Maven Assembly Plugin relies on the provided assembly descriptors to dictate
    its execution. Although there are already prefabricated descriptors available
    for use, they can only suffice some of the common assembly requirements.
    </p>
    <p>
    So in order for you to customize the way the Assembly Plugin creates your
    assemblies, you need to know how to use the Assembly Descriptor.
    </p>
    <p>
    This descriptor specifies the type of assembly archive to create, the contents
    of the assembly, and the ways in which dependencies or its modules are bundled
    with an assembly.
    </p>
    ]]>
  </description>
  <defaults>
    <default>
      <key>package</key>
      <value>org.apache.maven.plugins.assembly.model</value>
    </default>
  </defaults>
  <classes>
    <class rootElement="true" xml.tagName="assembly">
      <name>Assembly</name>
      <description>
        <![CDATA[
        An assembly defines a collection of files usually distributed in an
        archive format such as zip, tar, or tar.gz that is generated from a
        project.  For example, a project could produce a ZIP assembly which
        contains a project's JAR artifact in the root directory, the
        runtime dependencies in a lib/ directory, and a shell script to launch
        a stand-alone application.
        ]]>
      </description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>id</name>
          <version>1.0.0+</version>
          <required>true</required>
          <type>String</type>
          <description>
            Sets the id of this assembly. This is a symbolic name for a
            particular assembly of files from this project. Also, aside from
            being used to distinctly name the assembled package by attaching
            its value to the generated archive, the id is used as your
            artifact's classifier when deploying.
          </description>
        </field>
        <field>
          <name>formats</name>
          <version>1.0.0+</version>
          <required>false</required>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies the formats of the assembly.

            It is often better to specify the formats via the goal parameter rather
            than here. For example, that allows different profiles to generate
            different types of archives.

            Multiple formats can be
            supplied and the Assembly Plugin will generate an archive for each
            of the desired formats. When deploying your project, all file formats
            specified will also be deployed. A format is specified by supplying
            one of the following values in a &lt;format&gt; subelement:
            <ul>
              <li><b>"zip"</b> - Creates a ZIP file format</li>
              <li><b>"tar"</b> - Creates a TAR format</li>
              <li><b>"tar.gz"</b> or <b>"tgz"</b> - Creates a gzip'd TAR format</li>
              <li><b>"tar.bz2"</b> or <b>"tbz2"</b> - Creates a bzip'd TAR format</li>
              <li><b>"tar.snappy"</b> - Creates a snappy'd TAR format</li>
              <li><b>"tar.xz"</b> or <b>"txz"</b> - Creates a xz'd TAR format</li>
              <li><b>"jar"</b> - Creates a JAR format</li>
              <li><b>"dir"</b> - Creates an exploded directory format</li>
              <li><b>"war"</b> - Creates a WAR format</li>
            </ul>
            ]]>
          </description>
        </field>
        <field>
          <name>includeBaseDirectory</name>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            Includes a base directory in the final archive. For example,
            if you are creating an assembly named "your-app", setting
            includeBaseDirectory to true will create an archive that
            includes this base directory. If this option is set to false
            the archive created will unzip its content to the current
            directory.
          </description>
        </field>
        <field>
          <name>baseDirectory</name>
          <version>1.1.0+</version>
          <type>String</type>
          <description>
            Sets the base directory of the resulting assembly archive. If this is not
            set and includeBaseDirectory == true, ${project.build.finalName} will be used instead.
            (Since 2.2-beta-1)
          </description>
        </field>
        <field>
          <name>includeSiteDirectory</name>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description>
            Includes a site directory in the final archive. The site directory
            location of a project is determined by the siteDirectory parameter
            of the Assembly Plugin.
          </description>
        </field>
        <field>
          <name>containerDescriptorHandlers</name>
          <version>1.1.0+</version>
          <association>
            <type>ContainerDescriptorHandlerConfig</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Set of components which filter various container descriptors out of
            the normal archive stream, so they can be aggregated then added.
            ]]>
          </description>
        </field>
        <field>
          <name>moduleSets</name>
          <version>1.0.0+</version>
          <association>
            <type>ModuleSet</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which module files to include in the assembly. A moduleSet
            is specified by providing one or more of &lt;moduleSet&gt;
            subelements.
            ]]>
          </description>
        </field>
        <field>
          <name>fileSets</name>
          <version>1.0.0+</version>
          <association>
            <type>FileSet</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which groups of files to include in the assembly. A
            fileSet is specified by providing one or more of &lt;fileSet&gt;
            subelements.
            ]]>
          </description>
        </field>
        <field>
          <name>files</name>
          <version>1.0.0+</version>
          <association>
            <type>FileItem</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which single files to include in the assembly. A file
            is specified by providing one or more of &lt;file&gt;
            subelements.
            ]]>
          </description>
        </field>
        <field>
          <name>dependencySets</name>
          <version>1.0.0+</version>
          <association>
            <type>DependencySet</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which dependencies to include in the assembly. A
            dependencySet is specified by providing one or more of
            &lt;dependencySet&gt; subelements.
            ]]>
          </description>
        </field>
        <field>
          <name>repositories</name>
          <version>1.0.0+</version>
          <association>
            <type>Repository</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which repository files to include in the assembly. A
            repository is specified by providing one or more of
            &lt;repository&gt; subelements.
            ]]>
          </description>
        </field>
        <field>
          <name>componentDescriptors</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies the shared components xml file locations to include in the
            assembly. The locations specified must be relative to the base location
            of the descriptor. If the descriptor was found via a &lt;descriptorRef/&gt;
            element in the
            classpath, any components it specifies will also be found on the classpath.
            If it is found by pathname via a &lt;descriptor/&gt; element
            the value here will be interpreted
            as a path relative to the project basedir.
            When multiple componentDescriptors are found, their
            contents are merged. Check out the <a href="assembly-component.html">
            descriptor components</a> for more information. A
            componentDescriptor is specified by providing one or more of
            &lt;componentDescriptor&gt; subelements.
            ]]>
          </description>
        </field>
      </fields>
    </class>

    <!-- Shared with component descriptor from here on. -->
    <class>
      <name>FileSet</name>
      <version>1.0.0+</version>
      <description>
        A fileSet allows the inclusion of groups of files into the assembly.
      </description>
      <fields>
        <field>
          <name>useDefaultExcludes</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            Whether standard exclusion patterns, such as those matching CVS and Subversion
            metadata files, should be used when calculating the files affected by this set.
            For backward compatibility, the default value is true. (Since 2.2-beta-1)
          </description>
        </field>
        <field>
          <name>outputDirectory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the output directory relative to the root
            of the root directory of the assembly. For example,
            "log" will put the specified files in the log directory.
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;include&gt; subelements are present, they define a set of
            files and directory to include. If none is present, then
            &lt;includes&gt; represents all valid values.
            ]]>
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define a set of
            files and directory to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions.
            ]]>
          </description>
        </field>
        <field>
          <name>fileMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0644</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the file mode of the files included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of Read = 4,
            Write = 2, and Execute = 1.  For example, the value 0644
            translates to User read-write, Group and Other read-only. The default value is 0644.
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>directoryMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0755</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the directory mode of the directories
            included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of
            Read = 4, Write = 2, and Execute = 1.  For example, the value
            0755 translates to User read-write, Group and Other read-only.  The default value is 0755.
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>directory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the absolute or relative location from the module's
            directory. For example, "src/main/bin" would select this
            subdirectory of the project in which this dependency is defined.
          </description>
          <required>true</required>
        </field>
        <field>
          <name>lineEnding</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            <![CDATA[
            Sets the line-endings of the files in this fileSet.
            Valid values:
            <ul>
              <li><b>"keep"</b> - Preserve all line endings</li>
              <li><b>"unix"</b> - Use Unix-style line endings (i.e. "\n")</li>
              <li><b>"lf"</b> - Use a single line-feed line endings (i.e. "\n")</li>
              <li><b>"dos"</b> - Use DOS-/Windows-style line endings (i.e. "\r\n")</li>
              <li><b>"windows"</b> - Use DOS-/Windows-style line endings (i.e. "\r\n")</li>
              <li><b>"crlf"</b> - Use carriage-return, line-feed line endings (i.e. "\r\n")</li>
            </ul>
            ]]>
          </description>
        </field>
        <field>
          <name>filtered</name>
          <version>1.1.0+</version>
          <description>
          Whether to filter symbols in the files as they are copied, using
          properties from the build configuration. (Since 2.2-beta-1)
          </description>
          <defaultValue>false</defaultValue>
          <type>boolean</type>
        </field>
      </fields>
    </class>
    <class>
      <name>FileItem</name>
      <version>1.0.0+</version>
      <description>
        A file allows individual file inclusion with the option to change
        the destination filename not supported by fileSets.
      </description>
      <fields>
        <field>
          <name>source</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>true</required>
          <description>
            Sets the absolute or relative path from the module's directory
            of the file to be included in the assembly.
          </description>
        </field>
        <field>
          <name>outputDirectory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <required>false</required>
          <description>
            Sets the output directory relative to the root
            of the root directory of the assembly. For example,
            "log" will put the specified files in the log directory.
          </description>
        </field>
        <field>
          <name>destName</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the destination filename in the outputDirectory.
            Default is the same name as the source's file.
          </description>
        </field>
        <field>
          <name>fileMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0644</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the file mode of the files included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of Read = 4,
            Write = 2, and Execute = 1.  For example, the value 0644
            translates to User read-write, Group and Other read-only.  The default value is 0644
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>lineEnding</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            <![CDATA[
            Sets the line-endings of the files in this file.
            Valid values are:
            <ul>
              <li><b>"keep"</b> - Preserve all line endings</li>
              <li><b>"unix"</b> - Use Unix-style line endings (i.e. "\n")</li>
              <li><b>"lf"</b> - Use a single line-feed line endings (i.e. "\n")</li>
              <li><b>"dos"</b> - Use DOS-/Windows-style line endings (i.e. "\r\n")</li>
              <li><b>"windows"</b> - Use DOS-/Windows-style line endings (i.e. "\r\n")</li>
              <li><b>"crlf"</b> - Use carriage-return, line-feed line endings (i.e. "\r\n")</li>
            </ul>
            ]]>
          </description>
        </field>
        <field>
          <name>filtered</name>
          <version>1.0.0+</version>
          <type>boolean</type>
          <description>
            Sets whether to determine if the file is filtered.
          </description>
        </field>
      </fields>
    </class>

    <class>
      <name>DependencySet</name>
      <version>1.0.0+</version>
      <description>
        A dependencySet allows inclusion and exclusion of project dependencies
        in the assembly.
      </description>
      <fields>
        <field>
          <name>outputDirectory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the output directory relative to the root
            of the root directory of the assembly. For example,
            "log" will put the specified files in the log directory,
            directly beneath the root of the archive.
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;include&gt; subelements are present, they define a set of
            artifact coordinates to include. If none is present, then
            &lt;includes&gt; represents all valid values.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define a set of
            dependency artifact coordinates to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>fileMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0644</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the file mode of the files included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of Read = 4,
            Write = 2, and Execute = 1.  For example, the value 0644
            translates to User read-write, Group and Other read-only.  The default value is 0644
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>directoryMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0755</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the directory mode of the directories
            included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of
            Read = 4, Write = 2, and Execute = 1.  For example, the value
            0755 translates to User read-write, Group and Other read-only. The default value is 0755.
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>useStrictFiltering</name>
          <version>1.1.2+</version>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description>
          When specified as true, any include/exclude patterns which aren't used to filter an actual
          artifact during assembly creation will cause the build to fail with an error. This is meant
          to highlight obsolete inclusions or exclusions, or else signal that the assembly descriptor
          is incorrectly configured. (Since 2.2)
          </description>
        </field>
        <field>
          <name>outputFileNameMapping</name>
          <version>1.0.0+</version>
          <type>String</type>
          <defaultValue>${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</defaultValue>
          <description>
            Sets the mapping pattern for all dependencies included in this
            assembly. (Since 2.2-beta-2; 2.2-beta-1 uses ${artifactId}-${version}${dashClassifier?}.${extension}
            as default value).
            See the plugin FAQ for more details about entries usable in the outputFileNameMapping parameter.
          </description>
        </field>
        <field>
          <name>unpack</name>
          <version>1.0.0+</version>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description>
            If set to true, this property will unpack all dependencies
            into the specified output directory. When set to false
            dependencies will be includes as archives (jars). Can only unpack
            jar, zip, tar.gz, and tar.bz archives.
          </description>
        </field>
        <field>
          <name>unpackOptions</name>
          <version>1.1.0+</version>
          <description>
          Allows the specification of includes and excludes, along with filtering options, for items
          unpacked from a dependency artifact. (Since 2.2-beta-1)
          </description>
          <association>
            <type>UnpackOptions</type>
          </association>
        </field>
        <field>
          <name>scope</name>
          <version>1.0.0+</version>
          <type>String</type>
          <defaultValue>runtime</defaultValue>
          <required>true</required>
          <description>
            Sets the dependency scope for this dependencySet.
          </description>
        </field>
        <field>
          <name>useProjectArtifact</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description><![CDATA[
          Determines whether the artifact produced during the current project's
          build should be included in this dependency set. (Since 2.2-beta-1)
          ]]></description>
        </field>
        <field>
          <name>useProjectAttachments</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description><![CDATA[
          Determines whether the attached artifacts produced during the current project's
          build should be included in this dependency set. (Since 2.2-beta-1)
          ]]></description>
        </field>
        <field>
          <name>useTransitiveDependencies</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
          Determines whether transitive dependencies will be included in the processing of
          the current dependency set. If true, includes/excludes/useTransitiveFiltering
          will apply to transitive dependency artifacts in addition to the main project
          dependency artifacts. If false, useTransitiveFiltering is meaningless, and
          includes/excludes only affect the immediate dependencies of the project.
          By default, this value is true. (Since 2.2-beta-1)
          </description>
        </field>
        <field>
          <name>useTransitiveFiltering</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description>
          Determines whether the include/exclude patterns in this dependency set will be applied to
          the transitive path of a given artifact. If true, and the current artifact is a transitive
          dependency brought in by another artifact which matches an inclusion or exclusion pattern,
          then the current artifact has the same inclusion/exclusion logic applied to it as well. By
          default, this value is false, in order to preserve backward compatibility with version 2.1.
          This means that includes/excludes only apply directly to the current artifact, and not to
          the transitive set of artifacts which brought it in. (Since 2.2-beta-1)
          </description>
        </field>
      </fields>
    </class>

    <class>
      <name>ModuleSet</name>
      <description>
        <![CDATA[
        A moduleSet represent one or more project &lt;module&gt; present inside
        a project's pom.xml. This allows you to include sources or binaries
        belonging to a project's &lt;modules&gt;.

        <p><b>NOTE:</b> When using &lt;moduleSets&gt; from the command-line, it
        is required to pass first the package phase by doing: "mvn package
        assembly:assembly". This bug/issue is scheduled to be addressed by Maven 2.1.</p>
        ]]>
      </description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>useAllReactorProjects</name>
          <version>1.1.2+</version>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description>
          If set to true, the plugin will include all projects in the current reactor for processing
          in this ModuleSet. These will be subject to include/exclude rules. (Since 2.2)
          </description>
        </field>
        <field>
          <name>includeSubModules</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
          If set to false, the plugin will exclude sub-modules from processing in this ModuleSet.
          Otherwise, it will process all sub-modules, each subject to include/exclude rules. (Since 2.2-beta-1)
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;include&gt; subelements are present, they define a set of
            project coordinates to include. If none is present, then
            &lt;includes&gt; represents all valid values.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define a set of
            project artifact coordinates to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>sources</name>
          <version>1.0.0+</version>
          <description>
            When this is present, the plugin will include the source files of
            the included modules from this set in the resulting assembly.
          </description>
          <association>
            <type>ModuleSources</type>
          </association>
        </field>
        <field>
          <name>binaries</name>
          <version>1.0.0+</version>
          <description>
            When this is present, the plugin will include the binaries of the
            included modules from this set in the resulting assembly.
          </description>
          <association>
            <type>ModuleBinaries</type>
          </association>
        </field>
      </fields>
    </class>

    <class>
      <name>ModuleSources</name>
      <version>1.0.0+</version>
      <description>
        Contains configuration options for including the source files of a
        project module in an assembly.
      </description>
      <fields>
        <field>
          <name>useDefaultExcludes</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            Whether standard exclusion patterns, such as those matching CVS and Subversion
            metadata files, should be used when calculating the files affected by this set.
            For backward compatibility, the default value is true. (Since 2.2-beta-1)
          </description>
        </field>
        <field>
          <name>outputDirectory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the output directory relative to the root
            of the root directory of the assembly. For example,
            "log" will put the specified files in the log directory.
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;include&gt; subelements are present, they define a set of
            files and directory to include. If none is present, then
            &lt;includes&gt; represents all valid values.
            ]]>
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define a set of
            files and directory to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions.
            ]]>
          </description>
        </field>
        <field>
          <name>fileMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0644</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the file mode of the files included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of Read = 4,
            Write = 2, and Execute = 1.  For example, the value 0644
            translates to User read-write, Group and Other read-only. The default value is 0644
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>directoryMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0755</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the directory mode of the directories
            included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of
            Read = 4, Write = 2, and Execute = 1.  For example, the value
            0755 translates to User read-write, Group and Other read-only. The default value is 0755.
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>fileSets</name>
          <version>1.1.0+</version>
          <association>
            <type>FileSet</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which groups of files from each included module to include in the assembly. A
            fileSet is specified by providing one or more of &lt;fileSet&gt; subelements. (Since 2.2-beta-1)
            ]]>
          </description>
        </field>
        <field>
          <name>includeModuleDirectory</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            <![CDATA[
            Specifies whether the module's finalName should be prepended to the outputDirectory
            values of any fileSets applied to it. (Since 2.2-beta-1)
            ]]>
          </description>
        </field>
        <field>
          <name>excludeSubModuleDirectories</name>
          <version>1.1.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            <![CDATA[
            Specifies whether sub-module directories below the current module should be excluded
            from fileSets applied to that module. This might be useful if you only mean to copy
            the sources for the exact module list matched by this ModuleSet, ignoring (or processing
            separately) the modules which exist in directories below the current one. (Since 2.2-beta-1)
            ]]>
          </description>
        </field>
        <field>
          <name>outputDirectoryMapping</name>
          <version>1.1.0+</version>
          <type>String</type>
          <defaultValue>${module.artifactId}</defaultValue>
          <description>
            Sets the mapping pattern for all module base-directories included in this assembly.
            NOTE: This field is only used if includeModuleDirectory == true.
            Default is the module's ${artifactId} in 2.2-beta-1, and ${module.artifactId} in subsequent versions. (Since 2.2-beta-1)
          </description>
        </field>
      </fields>
    </class>

    <class>
      <name>ModuleBinaries</name>
      <version>1.0.0+</version>
      <description>
        Contains configuration options for including the binary files of a
        project module in an assembly.
      </description>
      <fields>
        <field>
          <name>outputDirectory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the output directory relative to the root
            of the root directory of the assembly. For example,
            "log" will put the specified files in the log directory,
            directly beneath the root of the archive.
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;include&gt; subelements are present, they define a set of
            artifact coordinates to include. If none is present, then
            &lt;includes&gt; represents all valid values.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define a set of
            dependency artifact coordinates to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>fileMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0644</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the file mode of the files included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of Read = 4,
            Write = 2, and Execute = 1.  For example, the value 0644
            translates to User read-write, Group and Other read-only. The default value is 0644
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>directoryMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0755</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the directory mode of the directories
            included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of
            Read = 4, Write = 2, and Execute = 1.  For example, the value
            0755 translates to User read-write, Group and Other read-only. The default value is 0755.
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>attachmentClassifier</name>
          <version>1.1.0+</version>
          <type>String</type>
          <description>
          When specified, the attachmentClassifier will cause the assembler to look at artifacts
          attached to the module instead of the main project artifact. If it can find an attached
          artifact matching the specified classifier, it will use it; otherwise, it will throw an
          exception. (Since 2.2-beta-1)
          </description>
        </field>
        <field>
          <name>includeDependencies</name>
          <version>1.0.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
          If set to true, the plugin will include the direct and transitive dependencies of
          of the project modules included here.  Otherwise, it will only include the module
          packages only.
          </description>
        </field>
        <field>
          <name>dependencySets</name>
          <version>1.1.0+</version>
          <association>
            <type>DependencySet</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies which dependencies of the module to include in the assembly. A
            dependencySet is specified by providing one or more of
            &lt;dependencySet&gt; subelements. (Since 2.2-beta-1)
            ]]>
          </description>
        </field>
        <field>
          <name>unpack</name>
          <version>1.0.0+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            If set to true, this property will unpack all module packages
            into the specified output directory. When set to false
            module packages will be included as archives (jars).
          </description>
        </field>
        <field>
          <name>unpackOptions</name>
          <version>1.1.0+</version>
          <description>
          Allows the specification of includes and excludes, along with filtering options, for items
          unpacked from a module artifact. (Since 2.2-beta-1)
          </description>
          <association>
            <type>UnpackOptions</type>
          </association>
        </field>
        <field>
          <name>outputFileNameMapping</name>
          <version>1.0.0+</version>
          <type>String</type>
          <defaultValue>${module.artifactId}-${module.version}${dashClassifier?}.${module.extension}</defaultValue>
          <description>
            Sets the mapping pattern for all NON-UNPACKED dependencies included
            in this assembly.
            (Since 2.2-beta-2; 2.2-beta-1 uses ${artifactId}-${version}${dashClassifier?}.${extension} as default value)
            NOTE: If the dependencySet specifies unpack == true, outputFileNameMapping WILL NOT BE USED; in these cases,
            use outputDirectory.
            See the plugin FAQ for more details about entries usable in the outputFileNameMapping parameter.
          </description>
        </field>
      </fields>
    </class>

    <class>
      <name>Repository</name>
      <version>1.0.0+</version>
      <description>
        <![CDATA[
        Defines a Maven repository to be included in the assembly. The artifacts
        available to be included in a repository are your project's dependency
        artifacts. The repository created contains the needed metadata entries
        and also contains both sha1 and md5 checksums. This is useful for creating
        archives which will be deployed to internal repositories.

        <p><b>NOTE:</b> Currently, only artifacts from the central repository
        are allowed.</p>
        ]]>
      </description>
      <fields>
        <field>
          <name>outputDirectory</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            Sets the output directory relative to the root
            of the root directory of the assembly. For example,
            "log" will put the specified files in the log directory,
            directly beneath the root of the archive.
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;include&gt; subelements are present, they define a set of
            artifact coordinates to include. If none is present, then
            &lt;includes&gt; represents all valid values.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define a set of
            dependency artifact coordinates to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions.

            Artifact coordinates may be given in simple groupId:artifactId form,
            or they may be fully qualified in the form groupId:artifactId:type[:classifier]:version.
            Additionally, wildcards can be used, as in *:maven-*
            ]]>
          </description>
        </field>
        <field>
          <name>fileMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0644</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the file mode of the files included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of Read = 4,
            Write = 2, and Execute = 1.  For example, the value 0644
            translates to User read-write, Group and Other read-only. The default value is 0644
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>directoryMode</name>
          <version>1.0.0+</version>
          <type>String</type>
          <!--
          <defaultValue>0755</defaultValue>
          -->
          <description>
            <![CDATA[
            Similar to a UNIX permission, sets the directory mode of the directories
            included.
            THIS IS AN OCTAL VALUE.
            Format: (User)(Group)(Other) where each component is a sum of
            Read = 4, Write = 2, and Execute = 1.  For example, the value
            0755 translates to User read-write, Group and Other read-only. The default value is 0755.
            <a href="http://www.onlamp.com/pub/a/bsd/2000/09/06/FreeBSD_Basics.html">(more on unix-style permissions)</a>
            ]]>
          </description>
        </field>
        <field>
          <name>includeMetadata</name>
          <version>1.0.0+</version>
          <type>boolean</type>
          <defaultValue>false</defaultValue>
          <description>
            If set to true, this property will trigger the creation of repository
            metadata which will allow the repository to be used as a functional remote
            repository.
          </description>
        </field>
        <field>
          <name>groupVersionAlignments</name>
          <version>1.0.0+</version>
          <description>
            <![CDATA[
            Specifies that you want to align a group of artifacts to a specified
            version. A groupVersionAlignment is specified by providing one or
            more of &lt;groupVersionAlignment&gt; subelements.
            ]]>
          </description>
          <association>
            <type>GroupVersionAlignment</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>scope</name>
          <version>1.1.0+</version>
          <type>String</type>
          <defaultValue>runtime</defaultValue>
          <required>true</required>
          <description>
            Specifies the scope for artifacts included in this repository. (Since 2.2-beta-1)
          </description>
        </field>
      </fields>
    </class>
    <class>
      <name>GroupVersionAlignment</name>
      <version>1.0.0+</version>
      <description>
        Allows a group of artifacts to be aligned to a specified version.
      </description>
      <fields>
        <field>
          <name>id</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            The groupId of the artifacts for which you want to align the
            versions.
          </description>
        </field>
        <field>
          <name>version</name>
          <version>1.0.0+</version>
          <type>String</type>
          <description>
            The version you want to align this group to.
          </description>
        </field>
        <field>
          <name>excludes</name>
          <version>1.0.0+</version>
          <description>
            <![CDATA[
            When &lt;exclude&gt; subelements are present, they define the
            artifactIds of the artifacts to exclude. If none is present, then
            &lt;excludes&gt; represents no exclusions. An exclude is specified
            by providing one or more of &lt;exclude&gt; subelements.
            ]]>
          </description>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
    </class>
    <class>
      <name>UnpackOptions</name>
      <version>1.1.0+</version>
      <description>
      Specifies options for including/excluding/filtering items extracted from an archive. (Since 2.2-beta-1)
      </description>
      <fields>
        <field>
          <name>includes</name>
          <version>1.1.0+</version>
          <description>
            <![CDATA[
            Set of file and/or directory patterns for matching items to be included from an archive as it is unpacked.
            Each item is specified as &lt;include&gt;some/path&lt;/include&gt; (Since 2.2-beta-1)
            ]]>
          </description>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>excludes</name>
          <version>1.1.0+</version>
          <description>
            <![CDATA[
            Set of file and/or directory patterns for matching items to be excluded from an archive as it is unpacked.
            Each item is specified as &lt;exclude&gt;some/path&lt;/exclude&gt; (Since 2.2-beta-1)
            ]]>
          </description>
          <association>
            <type>String</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field>
          <name>filtered</name>
          <version>1.1.0+</version>
          <description>
          Whether to filter symbols in the files as they are unpacked from the archive, using
          properties from the build configuration. (Since 2.2-beta-1)
          </description>
          <defaultValue>false</defaultValue>
          <type>boolean</type>
        </field>
        <field>
          <name>lineEnding</name>
          <version>1.1.2+</version>
          <type>String</type>
          <description>
            <![CDATA[
            Sets the line-endings of the files. (Since 2.2)
            Valid values:
            <ul>
              <li><b>"keep"</b> - Preserve all line endings</li>
              <li><b>"unix"</b> - Use Unix-style line endings</li>
              <li><b>"lf"</b> - Use a single line-feed line endings</li>
              <li><b>"dos"</b> - Use DOS-style line endings</li>
              <li><b>"crlf"</b> - Use Carraige-return, line-feed line endings</li>
            </ul>
            ]]>
          </description>
        </field>
        <field>
          <name>useDefaultExcludes</name>
          <version>1.1.2+</version>
          <type>boolean</type>
          <defaultValue>true</defaultValue>
          <description>
            Whether standard exclusion patterns, such as those matching CVS and Subversion
            metadata files, should be used when calculating the files affected by this set.
            For backward compatibility, the default value is true. (Since 2.2)
          </description>
        </field>
        <field>
          <name>encoding</name>
          <version>1.1.3+</version>
          <type>String</type>
          <description>
            <![CDATA[
            Allows to specify the encoding to use when unpacking archives, for unarchivers
            that support specifying encoding. If unspecified, archiver default will be used.
            Archiver defaults generally represent sane (modern) values.
            ]]>
          </description>
        </field>
      </fields>
    </class>
    <class>
      <name>ContainerDescriptorHandlerConfig</name>
      <version>1.1.0+</version>
      <description>
        Configures a filter for files headed into the assembly archive, to enable
        aggregation of various types of descriptor fragments, such as components.xml,
        web.xml, etc.
      </description>
      <fields>
        <field>
          <name>handlerName</name>
          <version>1.1.0+</version>
          <description>
            The handler's plexus role-hint, for lookup from the container.
          </description>
          <type>String</type>
          <required>true</required>
        </field>
        <field>
          <name>configuration</name>
          <version>1.1.1+</version>
          <description>
            Configuration options for the handler.
          </description>
          <type>DOM</type>
        </field>
      </fields>
    </class>
  </classes>
</model>
