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

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

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