<?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.
  -->

<!-- Note Definitions of FileSet, FileItem, and DependencySet are
     already defined in assembly.mdo, but repeated  here since
     Modello currently does not have capability to share files
-->

<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-COMPONENT/${version}"
       xml.schemaLocation="http://maven.apache.org/xsd/assembly-component-${version}.xsd">

  <id>assembly-component</id>
  <name>Component</name>
  <description>
    <![CDATA[
    <p>
    When creating several assemblies for a project with a custom assembly
    descriptor, it can't be helped that you will be duplicating some parts of
    a defined assembly. These duplicates can be extracted and placed in a
    separate file called a descriptor component.
    </p>
    <p>
    Descriptor components contain FileSets, Files, and DependencySets meant
    to be shared by assembly descriptors by referencing them using
    &lt;componentDescriptors&gt;. It allows multiple assemblies to share a set
    of user defined collections.
    </p>
    ]]>
  </description>
  <defaults>
    <default>
      <key>package</key>
      <value>org.apache.maven.plugins.assembly.model</value>
    </default>
  </defaults>
  <classes>
    <class rootElement="true" xml.tagName="component">
      <name>Component</name>
      <description>Describes the component layout and packaging.</description>
      <version>1.0.0+</version>
      <fields>
        <field>
          <name>moduleSets</name>
          <version>1.1.2+</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.1.0+</version>
          <association>
            <type>Repository</type>
            <multiplicity>*</multiplicity>
          </association>
          <description>
            <![CDATA[
            Specifies a set of repositories to include in the assembly. A
            repository is specified by providing one or more of
            &lt;repository&gt; subelements.
            ]]>
          </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>
      </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)
          </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</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>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)
          </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</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>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. Default is ${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}.
            (Since 2.2-beta-2; 2.2-beta-1 uses ${artifactId}-${version}${dashClassifier?}.${extension}).
            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>
        <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 included as archives (jars). Can only unpack
            jar, zip, tar.gz, and tar.bz archives. Default value is false.
          </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)
          </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.
            Default scope value is "runtime".
          </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. Default value is true,
          for backward compatibility. (Since 2.2)
          ]]></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. Default value is false. (Since 2.2)
          ]]></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)
          </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)
          </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;.

        <br/><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.
        ]]>
      </description>
      <version>1.1.2+</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.
          Default value is true. (Since 2.2)
          </description>
        </field>
        <field>
          <name>includeSubModules</name>
          <version>1.1.2+</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.
          Default value is true. (Since 2.2)
          </description>
        </field>
        <field>
          <name>includes</name>
          <version>1.1.2+</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.1.2+</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.1.2+</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.1.2+</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.1.2+</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.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>outputDirectory</name>
          <version>1.1.2+</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.1.2+</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.1.2+</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.1.2+</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.1.2+</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.2+</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)
            ]]>
          </description>
        </field>
        <field>
          <name>includeModuleDirectory</name>
          <version>1.1.2+</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. Default value is true. (Since 2.2)
            ]]>
          </description>
        </field>
        <field>
          <name>excludeSubModuleDirectories</name>
          <version>1.1.2+</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.
            Default value is true. (Since 2.2)
            ]]>
          </description>
        </field>
        <field>
          <name>outputDirectoryMapping</name>
          <version>1.1.2+</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)
          </description>
        </field>
      </fields>
    </class>

    <class>
      <name>ModuleBinaries</name>
      <version>1.1.2+</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.1.2+</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.1.2+</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.1.2+</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.1.2+</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.1.2+</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.2+</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)
          </description>
        </field>
        <field>
          <name>includeDependencies</name>
          <version>1.1.2+</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. Default value is true.
          </description>
        </field>
        <field>
          <name>dependencySets</name>
          <version>1.1.2+</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)
            ]]>
          </description>
        </field>
        <field>
          <name>unpack</name>
          <version>1.1.2+</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).
            Default value is true.
          </description>
        </field>
        <field>
          <name>unpackOptions</name>
          <version>1.1.2+</version>
          <description>
          Allows the specification of includes and excludes, along with filtering options, for items
          unpacked from a module artifact. (Since 2.2)
          </description>
          <association>
            <type>UnpackOptions</type>
          </association>
        </field>
        <field>
          <name>outputFileNameMapping</name>
          <version>1.1.2+</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.
            Default is ${module.artifactId}-${module.version}${dashClassifier?}.${module.extension}.
            (Since 2.2-beta-2; 2.2-beta-1 uses ${artifactId}-${version}${dashClassifier?}.${extension}) 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.

        <br/><b>NOTE:</b> Currently, only artifacts from the central repository
        are allowed.
        ]]>
      </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. Default value is false.
          </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.
            Default scope value is "runtime". (Since 2.2)
          </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)
      </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)
            ]]>
          </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)
            ]]>
          </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)
          </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>
