You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2007/09/06 00:59:17 UTC

svn commit: r573091 [3/8] - in /maven/components/trunk/maven-embedder/src/test/projects/complex-project: maven-lifecycle/ maven-lifecycle/src/ maven-lifecycle/src/main/ maven-lifecycle/src/main/java/ maven-lifecycle/src/main/java/org/ maven-lifecycle/s...

Added: maven/components/trunk/maven-embedder/src/test/projects/complex-project/maven-model/src/main/mdo/maven.mdo
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/test/projects/complex-project/maven-model/src/main/mdo/maven.mdo?rev=573091&view=auto
==============================================================================
--- maven/components/trunk/maven-embedder/src/test/projects/complex-project/maven-model/src/main/mdo/maven.mdo (added)
+++ maven/components/trunk/maven-embedder/src/test/projects/complex-project/maven-model/src/main/mdo/maven.mdo Wed Sep  5 15:58:29 2007
@@ -0,0 +1,3902 @@
+<?xml version="1.0"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you 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.
+-->
+
+<!--
+  |
+  | o add specification element to a field, this would be more a technical description of
+  |   what is allowed in the field.
+  |
+  | o validators: there could be several levels of validation. Simple type validation could
+  |   be done with a regex, but we need inter-field validation and rules which could be
+  |   dealt with by something like drools.
+  |
+  | o i18n: would be good to be able to have names/descriptions/specifications
+  |   in as many languages as possible.
+  |
+  | o annotation mechanism so that changes to the model can be accurately tracked.
+  |
+  | o need to clean up all the descriptions, matching anything to the current project-descriptor.xml file and
+  |   improving on that
+  |
+  | o use enums where appropriate (eg dependency scope)
+  |
+  | o a number of elements have a grouId/artifactId and sometimes version. It would be good to have them all extend one
+  |   definition of these types
+  |
+-->
+<model xsd.namespace="http://maven.apache.org/POM/4.0.0"
+  xsd.target-namespace="http://maven.apache.org/POM/4.0.0">
+  <id>maven</id>
+  <name>Maven</name>
+  <description>
+    <![CDATA[
+    <p>This is a reference for the Maven project descriptor used in Maven.</p>
+    <p>An XSD is available at:</p>
+    <ul>
+      <li><a href="http://maven.apache.org/maven-v3_0_0.xsd">http://maven.apache.org/maven-v3_0_0.xsd</a> for Maven 1.1.</li>
+      <li><a href="http://maven.apache.org/maven-v4_0_0.xsd">http://maven.apache.org/maven-v4_0_0.xsd</a> for Maven 2.0.</li>
+    </ul>
+    ]]>
+  </description>
+  <defaults>
+    <default>
+      <key>package</key>
+      <value>org.apache.maven.model</value>
+    </default>
+  </defaults>
+  <classes>
+    <class rootElement="true" xml.tagName="project">
+      <name>Model</name>
+      <superClass>ModelBase</superClass>
+      <description>
+        <![CDATA[
+        The <code>&lt;project&gt;</code> element is the root of the descriptor.
+        The following table lists all of the possible child elements.
+        ]]>
+      </description>
+      <version>3.0.0+</version>
+      <fields>
+        <field>
+          <name>extend</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The location of the parent project, if one exists. Values from the
+            parent project will be the default for this project if they are
+            left unspecified. The path may be absolute, or relative to the
+            current <code>project.xml</code> file. For example,
+            <code>&lt;extend&gt;${basedir}/../project.xml&lt;/extend&gt;</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>parent</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The location of the parent project, if one exists. Values from the
+            parent project will be the default for this project if they are
+            left unspecified. The location is given as a group ID, artifact ID
+            and version.
+            ]]>
+          </description>
+          <association>
+            <type>Parent</type>
+          </association>
+          <comment></comment>
+        </field>
+        <field>
+          <name>modelVersion</name>
+          <version>4.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            Declares to which version of project descriptor this POM conforms.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>pomVersion</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <type>String</type>
+          <description>
+            <![CDATA[
+            Declares to which version of project descriptor this POM conforms.
+            The only valid value is <code>3</code>.
+            ]]>
+          </description>
+        </field>
+        <field>
+          <name>groupId</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            A universally unique identifier for a project. It is normal to
+            use a fully-qualified package name to distinguish it from other
+            projects with a similar name (eg. <code>org.apache.maven</code>).
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>artifactId</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The identifier for this artifact that is unique within the group
+            given by the group ID.
+            An artifact is something that is either produced or used by a project.
+            Examples of artifacts produced by Maven for a project include: JARs,
+            source and binary distributions, and WARs.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>id</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            <b>Deprecated</b>. When used, this sets both the <code>groupId</code>
+            and <code>artifactId</code> elements if they were previously empty.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>packaging</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The type of artifact this project produces, for example <code>jar</code>
+              <code>war</code>
+              <code>ear</code>
+              <code>pom</code>.
+            Plugins can create their own packaging, and
+            therefore their own packaging types,
+            so this list does not contain all possible types.
+            ]]>
+          </description>
+          <type>String</type>
+          <defaultValue>jar</defaultValue>
+        </field>
+        <field>
+          <name>name</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The full name of the project.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>currentVersion</name>
+          <description>
+            <![CDATA[
+            The current version of the artifact produced by this project.
+            ]]>
+          </description>
+          <version>3.0.0</version>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>version</name>
+          <version>4.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The current version of the artifact produced by this project.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>shortDescription</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            A short description of the project. The short description should be
+            limited to a single line.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>description</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            A detailed description of the project, used by Maven whenever it needs
+            to describe the project, such as on the web site. While this element can
+            be specified as CDATA to enable the use of HTML tags within the description,
+            it is discouraged to allow plain text representation.
+            If you need to modify the index page of the generated web site, you are able
+            to specify your own instead of adjusting this text.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The URL to the project's homepage.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>logo</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The URL of the project's logo image.  This can be an URL relative
+            to the base directory of the generated web site,
+            (e.g., <code>/images/project-logo.png</code>) or an absolute URL
+            (e.g., <code>http://my.corp/project-logo.png</code>). This is used
+            when generating the project documentation.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>prerequisites</name>
+          <version>4.0.0</version>
+          <description>
+            Describes the prerequisites in the build environment for
+            this project.
+          </description>
+          <association>
+            <type>Prerequisites</type>
+          </association>
+        </field>
+        <field>
+          <name>issueTrackingUrl</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The URL of the project's issue tracking system.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>issueManagement</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The project's issue management system information.
+            ]]>
+          </description>
+          <association>
+            <type>IssueManagement</type>
+          </association>
+        </field>
+        <field>
+          <name>ciManagement</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The project's continuous integration information.
+            ]]>
+          </description>
+          <association>
+            <type>CiManagement</type>
+          </association>
+        </field>
+        <field>
+          <name>inceptionYear</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The year of the project's inception, specified with 4 digits.
+            This value is used when generating copyright notices as well as being informational.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>gumpRepositoryId</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            This is the repository identifier in Gump that this project is part of.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>siteAddress</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The hostname of the web server that hosts the project's web site.
+            This is used when the web site is deployed.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>siteDirectory</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The directory on the web server where the public web site
+            for this project resides. This is used when the web site is deployed.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>distributionSite</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The server where the final distributions will be published. This is used when the
+            distributions are deployed. If this isn't defined, the central repository is used instead as
+            determined by <code>maven.repo.central</code> and <code>maven.repo.central.directory</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>distributionDirectory</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The directory on the web server where the final distributions will be published.
+            This is used when the distributions are deployed.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>mailingLists</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Contains information about a project's mailing lists.
+            ]]>
+          </description>
+          <association>
+            <type>MailingList</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>developers</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Describes the committers of a project.
+            ]]>
+          </description>
+          <association>
+            <type>Developer</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>contributors</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Describes the contributors to a project that are not yet committers.
+            ]]>
+          </description>
+          <association>
+            <type>Contributor</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>licenses</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            This element describes all of the licenses for this project.
+            Each license is described by a <code>license</code> element, which
+            is then described by additional elements.
+            Projects should only list the license(s) that applies to the project
+            and not the licenses that apply to dependencies.
+            If multiple licenses are listed, it is assumed that the user can select
+            any of them, not that they must accept all.
+            ]]>
+          </description>
+          <association>
+            <type>License</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>versions</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Contains information on previous versions of the project.
+            ]]>
+          </description>
+          <association>
+            <type>Version</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>branches</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Contains information on SCM branches of the project.
+            ]]>
+          </description>
+          <association>
+            <type>Branch</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>packageGroups</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Package groups required for complete javadocs.
+            ]]>
+          </description>
+          <association>
+            <type>PackageGroup</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>reports</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            This element includes the specification of reports to be
+            included in a Maven-generated site.  These reports will be run
+            when a user executes <code>maven site</code>.  All of the
+            reports will be included in the navigation bar for browsing in
+            the order they are specified.
+            ]]>
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>scm</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Specification for the SCM used by the project, such as CVS, Subversion, etc.
+            ]]>
+          </description>
+          <association>
+            <type>Scm</type>
+          </association>
+        </field>
+        <field>
+          <name>repository</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Specification for the SCM used by the project, such as CVS, Subversion, etc.
+            ]]>
+          </description>
+          <association>
+            <type>Repository</type>
+          </association>
+        </field>
+        <field>
+          <name>organization</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            This element describes various attributes of the organization to
+            which the project belongs.  These attributes are utilized when
+            documentation is created (for copyright notices and links).
+            ]]>
+          </description>
+          <alias>organisation</alias>
+          <association>
+            <type>Organization</type>
+          </association>
+        </field>
+        <field>
+          <name>properties</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Project properties that will be used by various plugins.
+            The format is <code>&lt;name&gt;value&lt;/name&gt;</code>.
+            ]]>
+          </description>
+          <type>Properties</type>
+          <association xml.mapStyle="inline">
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field xml.tagName="package">
+          <name>packageName</name>
+          <version>3.0.0</version>
+          <type>String</type>
+          <description>
+            <![CDATA[
+            The Java package name of the project.  This value is used
+            when generating JavaDoc.
+            ]]>
+          </description>
+        </field>
+        <field>
+          <name>build</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            Information required to build the project.
+            ]]>
+          </description>
+          <association>
+            <type>Build</type>
+          </association>
+        </field>
+        <field>
+          <name>profiles</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            A listing of project-local build profiles which will modify
+            the build process when activated.
+            ]]>
+          </description>
+          <association>
+            <type>Profile</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>3.0.0</version>
+          <code>
+            <![CDATA[
+              public void setVersion(String version)
+              {
+                  this.currentVersion = version;
+              }
+
+              public String getVersion()
+              {
+                  return currentVersion;
+              }
+
+              /* We need this because we can't use package as a field name.*/
+              public void setPackage(String packageName)
+              {
+                  this.packageName = packageName;
+              }
+
+              public String getPackage()
+              {
+                  return packageName;
+              }
+            ]]>
+          </code>
+        </codeSegment>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @return the model id as <code>groupId:artifactId:packaging:version</code>
+     */
+      public String getId()
+      {
+          StringBuffer id = new StringBuffer();
+
+          id.append( getGroupId() == null ? "[inherited]" : getGroupId() );
+          id.append( ":" );
+          id.append( getArtifactId() );
+          id.append( ":" );
+          id.append( getPackaging() );
+          id.append( ":" );
+          id.append( getVersion() == null ? "[inherited]" : getVersion() );
+
+          return id.toString();
+      }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+    <class>
+      <name>ModelBase</name>
+      <version>3.0.0+</version>
+      <description>
+        <![CDATA[
+        Base class for the <code>Model</code> and the <code>Profile</code> objects.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>modules</name>
+          <version>4.0.0</version>
+          <description>
+            The modules (sometimes called subprojects) to build as a
+            part of this project. Each module listed is a relative path
+            to the directory containing the module.
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>repositories</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The lists of the remote repositories for discovering dependencies and
+            extensions.
+            ]]>
+          </description>
+          <association>
+            <type>Repository</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>pluginRepositories</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The lists of the remote repositories for discovering plugins for builds and reports.
+            ]]>
+          </description>
+          <association>
+            <type>Repository</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>dependencies</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            This element describes all of the dependencies associated with a
+            project.
+            These dependencies are used to construct a classpath for your
+            project during the build process. They are automatically downloaded from the
+            repositories defined in this project.
+            See <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+            dependency mechanism</a> for more information.
+            ]]>
+          </description>
+          <association>
+            <type>Dependency</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>reports</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            <b>Deprecated</b>. Now ignored by Maven.
+            ]]>
+          </description>
+          <type>DOM</type>
+        </field>
+        <field>
+          <name>reporting</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            This element includes the specification of report plugins to use
+            to generate the reports on the Maven-generated site.
+            These reports will be run when a user executes <code>mvn site</code>.
+            All of the reports will be included in the navigation bar for browsing.
+            ]]>
+          </description>
+          <association>
+            <type>Reporting</type>
+          </association>
+        </field>
+        <field>
+          <name>dependencyManagement</name>
+          <version>4.0.0</version>
+          <required>false</required>
+          <description>
+            <![CDATA[
+            Default dependency information for projects that inherit from
+            this one. The dependencies in this section are not immediately resolved.
+            Instead, when a POM derived from this one declares a dependency
+            described by a matching groupId and artifactId, the version and other values from this
+            section are used for that dependency if they were not already specified.
+            ]]>
+          </description>
+          <association>
+            <type>DependencyManagement</type>
+          </association>
+        </field>
+        <field>
+          <name>distributionManagement</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Distribution information for a project that enables deployment of the site
+            and artifacts to remote web servers and repositories respectively.
+            ]]>
+          </description>
+          <association>
+            <type>DistributionManagement</type>
+          </association>
+        </field>
+        <field>
+          <name>properties</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Properties that can be used throughout the POM as a substitution, and
+            are used as filters in resources if enabled.
+            The format is <code>&lt;name&gt;value&lt;/name&gt;</code>.
+            ]]>
+          </description>
+          <type>Properties</type>
+          <association xml.mapStyle="inline">
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Branch</name>
+      <version>3.0.0</version>
+      <description>
+        <![CDATA[
+        Contains information on the SCM branches of the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>tag</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The branch tag in the version control system (e.g. cvs) used by the
+            project for the source code associated with this branch of the
+            project.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>PluginContainer</name>
+      <version>3.0.0+</version>
+      <description>
+        <![CDATA[
+        Contains the plugins informations for the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>plugins</name>
+          <version>4.0.0</version>
+          <description>The list of plugins to use.</description>
+          <association>
+            <type>Plugin</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    java.util.Map pluginMap;
+
+    /**
+     * Reset the <code>pluginsMap</code> field to <code>null</code>
+     */
+    public void flushPluginMap()
+    {
+        this.pluginMap = null;
+    }
+
+    /**
+     * @return a Map of plugins field with <code>Plugins#getKey()</code> as key
+     * @see org.apache.maven.model.Plugin#getKey()
+     */
+    public java.util.Map getPluginsAsMap()
+    {
+        if ( pluginMap == null )
+        {
+            pluginMap = new java.util.HashMap();
+            if ( plugins != null )
+            {
+                for ( java.util.Iterator it = plugins.iterator(); it.hasNext(); )
+                {
+                    Plugin plugin = (Plugin) it.next();
+                    pluginMap.put( plugin.getKey(), plugin );
+                }
+            }
+        }
+
+        return pluginMap;
+    }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+    <class>
+      <name>PluginConfiguration</name>
+      <version>3.0.0+</version>
+      <superClass>PluginContainer</superClass>
+      <description>
+        <![CDATA[
+        Contains the plugins management informations for the project.
+        ]]>
+      </description>
+      <fields>
+        <!-- [ jdcasey:06-Mar-2005 ] Added to handle version management, etc. for
+          | plugins to be used in sub-projects. -->
+        <field>
+          <name>pluginManagement</name>
+          <version>4.0.0</version>
+          <required>false</required>
+          <description>
+            <![CDATA[
+            Default plugin information to be made available for reference by
+            projects derived from this one. This plugin configuration will not
+            be resolved or bound to the lifecycle unless referenced. Any local
+            configuration for a given plugin will override the plugin's entire
+            definition here.
+            ]]>
+          </description>
+          <association>
+            <type>PluginManagement</type>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>BuildBase</name>
+      <version>3.0.0+</version>
+      <superClass>PluginConfiguration</superClass>
+      <description>
+        <![CDATA[
+        Generic informations for a build.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>defaultGoal</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The default goal (or phase in Maven 2) to execute when none is
+            specified for the project.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>resources</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            This element describes all of the classpath resources such as
+            properties files associated with a project.
+            These resources are often included in the final package.
+            ]]>
+          </description>
+          <association>
+            <type>Resource</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>testResources</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            This element describes all of the classpath resources such as
+            properties files associated with a project's unit tests.
+            ]]>
+          </description>
+          <association>
+            <type>Resource</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>directory</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The directory where all files generated by the build are placed.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>finalName</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The filename (excluding the extension, and with no path information) that
+            the produced artifact will be called.
+            The default value is <code>${artifactId}-${version}</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>filters</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The list of filter properties files that are used when filtering is enabled.
+            ]]>
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Build</name>
+      <version>3.0.0+</version>
+      <superClass>BuildBase</superClass>
+      <description>
+        <![CDATA[
+        The <code>&lt;build&gt;</code> element contains informations required to build the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>nagEmailAddress</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            An address to which notifications regarding the status of builds
+            for this project can be sent. This is intended for use by tools
+            which do unattended builds, for example those providing for
+            continuous integration.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>sourceDirectory</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            This element specifies a directory containing the source
+            of the project. The generated build system will compile
+            the source in this directory when the project is built.
+            The path given is relative to the project descriptor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>scriptSourceDirectory</name>
+          <version>4.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            This element specifies a directory containing the script sources
+            of the project. This directory is meant to be different from the
+            sourceDirectory, in that its contents will be copied to the output
+            directory in most cases (since scripts are interpreted rather than
+            compiled).
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>unitTestSourceDirectory</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            This element specifies a directory containing the unit test
+            source of the project. The generated build system will
+            compile these directories when the project is being tested.
+            The path given is relative to the project descriptor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>testSourceDirectory</name>
+          <version>4.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            This element specifies a directory containing the unit test
+            source of the project. The generated build system will
+            compile these directories when the project is being tested.
+            The path given is relative to the project descriptor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>aspectSourceDirectory</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            This element specifies a directory containing Aspect
+            sources of the project.  The generated build system will
+            compile the Aspects in this directory when the project is
+            built if Aspects have been enabled.
+            The path given is relative to the project descriptor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>integrationUnitTestSourceDirectory</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            This element is <strong>deprecated</strong> and should no longer be used.
+            Initially it was used by the first Cactus plugin. Now
+            the location of the Cactus test sources is defined
+            through a plugin property. See the Cactus plugin
+            <a href="http://jakarta.apache.org/cactus/integration/maven/properties.html">properties</a>
+            page.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>sourceModifications</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            This element describes all of the sourceModifications associated
+            with a project. These modifications are used
+            to exclude or include various source depending on the environment
+            the build is running in.
+            ]]>
+          </description>
+          <association>
+            <type>SourceModification</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>unitTest</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            This element specifies unit tests associated with the project.
+            ]]>
+          </description>
+          <defaultValue>new UnitTest()</defaultValue>
+          <association>
+            <type>UnitTest</type>
+          </association>
+        </field>
+        <field>
+          <name>outputDirectory</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The directory where compiled application classes are placed.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>testOutputDirectory</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The directory where compiled test classes are placed.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>extensions</name>
+          <version>4.0.0</version>
+          <description>
+            A set of build extensions to use from this project.
+          </description>
+          <association>
+            <type>Extension</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>CiManagement</name>
+      <version>4.0.0</version>
+      <description>
+        <![CDATA[
+        The <code>&lt;CiManagement&gt;</code> element contains informations required to the
+        continuous integration system of the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>system</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The name of the continuous integration system, e.g. <code>continuum</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            URL for the continuous integration system used by the project if it has a web interface.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>notifiers</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Configuration for notifying developers/users when a build is
+            unsuccessful, including user information and notification mode.
+            ]]>
+          </description>
+          <association>
+            <multiplicity>*</multiplicity>
+            <type>Notifier</type>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Notifier</name>
+      <description>
+        Configures one method for notifying users/developers when a
+        build breaks.
+      </description>
+      <version>4.0.0</version>
+      <fields>
+        <field>
+          <name>type</name>
+          <version>4.0.0</version>
+          <defaultValue>mail</defaultValue>
+          <type>String</type>
+          <description>
+            The mechanism used to deliver notifications.
+          </description>
+        </field>
+        <field>
+          <name>sendOnError</name>
+          <version>4.0.0</version>
+          <defaultValue>true</defaultValue>
+          <type>boolean</type>
+          <description>
+            Whether to send notifications on error.
+          </description>
+        </field>
+        <field>
+          <name>sendOnFailure</name>
+          <version>4.0.0</version>
+          <defaultValue>true</defaultValue>
+          <type>boolean</type>
+          <description>
+            Whether to send notifications on failure.
+          </description>
+        </field>
+        <field>
+          <name>sendOnSuccess</name>
+          <version>4.0.0</version>
+          <defaultValue>true</defaultValue>
+          <type>boolean</type>
+          <description>
+            Whether to send notifications on success.
+          </description>
+        </field>
+        <field>
+          <name>sendOnWarning</name>
+          <version>4.0.0</version>
+          <defaultValue>true</defaultValue>
+          <type>boolean</type>
+          <description>
+            Whether to send notifications on warning.
+          </description>
+        </field>
+        <!-- TODO: Remove it after continuum alpha-3 release -->
+        <field>
+          <name>address</name>
+          <version>4.0.0</version>
+          <type>String</type>
+          <description>
+            <![CDATA[
+            <b>Deprecated</b>. Where to send the notification to - eg email address.
+            ]]>
+          </description>
+        </field>
+        <field>
+          <name>configuration</name>
+          <description>
+            Extended configuration specific to this notifier goes here.
+          </description>
+          <type>Properties</type>
+          <association xml.mapStyle="inline">
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Contributor</name>
+      <description>
+        Description of a person who has contributed to the project, but
+        who does not have commit privileges. Usually, these
+        contributions come in the form of patches submitted.
+      </description>
+      <version>3.0.0+</version>
+      <fields>
+        <field>
+          <name>name</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The full name of the contributor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>email</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The email address of the contributor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The URL for the homepage of the contributor.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <!-- TODO: should this just be a single Organization element -->
+        <field>
+          <name>organization</name>
+          <alias>organisation</alias>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The organization to which the contributor belongs.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>organizationUrl</name>
+          <alias>organisationUrl</alias>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The URL of the organization.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>roles</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The roles the contributor plays in the project.  Each role is
+            described by a <code>role</code> element, the body of which is a
+            role name. This can also be used to describe the contribution.
+            ]]>
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>timezone</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The timezone the contributor is in. This is a number in the range -11 to 12.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>properties</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Properties about the contributor, such as an instant messenger handle.
+            ]]>
+          </description>
+          <type>Properties</type>
+          <association xml.mapStyle="inline">
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Dependency</name>
+      <version>3.0.0+</version>
+      <description>
+        <![CDATA[
+        The <code>&lt;dependency&gt;</code> element contains informations required to a dependency
+        of the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>id</name>
+          <version>3.0.0</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            <strong>Deprecated</strong>. Please use <code>groupId</code> and
+            <code>artifactId</code> together instead.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>groupId</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The project group that produced the dependency, e.g.
+            <code>org.apache.maven</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>artifactId</name>
+          <version>3.0.0+</version>
+          <required>true</required>
+          <description>
+            <![CDATA[
+            The unique id for an artifact produced by the project group, e.g.
+            <code>maven-artifact</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>version</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The version of the dependency, e.g. <code>3.2.1</code>. In Maven 2, this can also be
+            specified as a range of versions.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            This url will be provided to the user if the jar file cannot be downloaded
+            from the central repository.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>jar</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Literal name of the artifact in the repository. Used to override the
+            calculated artifact name.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>type</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The type of dependency. This defaults to <code>jar</code>. While it
+            usually represents the extension on the filename of the dependency,
+            that is not always the case.
+            Some examples are <code>jar</code>, <code>war</code>, and <code>plugin</code>.
+            A dependency of type <code>plugin</code> is loaded as a Maven plugin and
+            not added to the project build classpath.
+            ]]>
+          </description>
+          <type>String</type>
+          <defaultValue>jar</defaultValue>
+        </field>
+        <field>
+          <name>type</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The type of dependency. This defaults to <code>jar</code>. While it
+            usually represents the extension on the filename of the dependency,
+            that is not always the case. A type can be mapped to a different
+            extension and a classifier.
+            The type often correspongs to the packaging used, though this is also
+            not always the case.
+            Some examples are <code>jar</code>, <code>war</code>, <code>ejb-client</code>
+            and <code>test-jar</code>.
+            New types can be defined by plugins that set
+            <code>extensions</code> to <code>true</code>, so this is not a complete list.
+            ]]>
+          </description>
+          <type>String</type>
+          <defaultValue>jar</defaultValue>
+        </field>
+        <field>
+          <name>classifier</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The classifier of the dependency. This allows distinguishing two artifacts
+            that belong to the same POM but were built differently, and is appended to
+            the filename after the version. For example, <code>jdk14</code> and <code>jdk15</code>.
+            ]]>
+          </description>
+          <type>String</type>
+          <required>false</required>
+        </field>
+        <field>
+          <name>properties</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Properties about the dependency. Various plugins allow you to
+            mark dependencies with properties. For example the war plugin looks for a
+            <code>war.bundle</code> property, and if found will include the
+            dependency in <code>WEB-INF/lib</code>.
+            ]]>
+          </description>
+          <type>Properties</type>
+          <association xml.mapStyle="inline">
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>scope</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The scope of the dependency - <code>compile</code>, <code>runtime</code>,
+            <code>test</code>, <code>system</code>, and <code>provided</code>. Used to
+            calculate the various classpaths used for compilation, testing, and so on.
+            It also assists in determining which artifacts to include in a distribution of
+            this project. For more information, see
+            <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+            dependency mechanism</a>.
+            ]]>
+          </description>
+          <type>String</type>
+          <!-- This default has to be enforced at the maven-artifact layer, to allow
+            | injection of defaults from <dependencyManagement/>.
+            | TODO: how can we document it?
+            |-->
+          <!-- defaultValue>compile</defaultValue -->
+        </field>
+        <field>
+          <name>systemPath</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            FOR SYSTEM SCOPE ONLY. Note that use of this property is <b>discouraged</b>
+            and may be replaced in later versions. This specifies the path on the filesystem
+            for this dependency.
+            Requires an absolute path for the value, not relative.
+            Use a property that gives the machine specific absolute path,
+            e.g. <code>${java.home}</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>exclusions</name>
+          <version>4.0.0</version>
+          <description>
+            Lists a set of artifacts that should be excluded from this
+            dependency's artifact list when it comes to calculating
+            transitive dependencies.
+          </description>
+          <association>
+            <type>Exclusion</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>optional</name>
+          <version>4.0.0</version>
+          <description>
+            Indicates the dependency is optional for use of this
+            library. While the version of the dependency will be taken
+            into account for dependency calculation if the library is
+            used elsewhere, it will not be passed on transitively.
+          </description>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>3.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString()
+    {
+        return groupId + "/" + type + "s:" + artifactId + "-" + version;
+    }
+            ]]>
+          </code>
+        </codeSegment>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString()
+    {
+        return "Dependency {groupId=" + groupId + ", artifactId=" + artifactId + ", version=" + version + ", type=" + type + "}";
+    }
+            ]]>
+          </code>
+        </codeSegment>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @return the management key as <code>groupId:artifactId:type</code>
+     */
+    public String getManagementKey()
+    {
+        return groupId + ":" + artifactId + ":" + type + ( classifier != null ? ":" + classifier : "" );
+    }
+            ]]>
+          </code>
+        </codeSegment>
+        <codeSegment>
+          <version>3.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @return the key as <code>id:type</code>
+     */
+    public String getKey()
+    {
+        return getId() + ":" + getType();
+    }
+
+    /**
+     * @return the groupId as artifact directory
+     */
+    public String getArtifactDirectory()
+    {
+        return getGroupId();
+    }
+
+    /**
+     * @return the artifact name as <code>artifactId-version.extension</code> if &lt;jar/&gt; not set
+     */
+    public String getArtifact()
+    {
+        // If the jar name has been explicty set then use that. This
+        // is when the <jar/> element is explicity used in the POM.
+        if ( getJar() != null)
+        {
+            return getJar();
+        }
+
+        String artifact;
+
+        if ("ejb-client".equals(getType())) {
+          artifact = getArtifactId() + "-" + getVersion() + "-client." + getExtension();
+        } else {
+          artifact = getArtifactId() + "-" + getVersion() + "." + getExtension();
+        }
+
+        return artifact;
+    }
+
+    public String getTypeDirectory()
+    {
+        String path;
+        if (getType().equals("ejb-client")) {
+            path = "ejbs";
+        } else {
+            path = getType() + "s";
+        }
+
+        return path;
+    }
+
+    public String getExtension()
+    {
+        if ("ejb".equals(getType()) || "ejb-client".equals(getType()) || "plugin".equals(getType()) || "aspect".equals(getType()) || "uberjar".equals(getType())) return "jar";
+        return getType();
+    }
+
+    public boolean isAddedToClasspath()
+    {
+        return ("jar".equals(getType()) || "ejb".equals(getType()) || "ejb-client".equals(getType()) || "sar".equals(getType()));
+    }
+
+    public boolean isPlugin()
+    {
+        return ("plugin".equals(getType()));
+    }
+
+    public String getProperty( String property )
+    {
+        return getProperties().getProperty( property );
+    }
+
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( Object o )
+    {
+        if ( this == o )
+        {
+            return true;
+        }
+
+        if ( !( o instanceof Dependency ) )
+        {
+            return false;
+        }
+
+        Dependency d  = (Dependency) o;
+        return getId().equals( d.getId() );
+    }
+
+    /**
+     * @see java.lang.Object#hashCode()
+     */
+    public int hashCode()
+    {
+        return getId().hashCode();
+    }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+    <class>
+      <superClass>Contributor</superClass>
+      <name>Developer</name>
+      <description>
+        <![CDATA[
+        Information about one of the committers on this project.
+        ]]>
+      </description>
+      <version>3.0.0+</version>
+      <fields>
+        <field>
+          <name>id</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The unique ID of the developer in the SCM.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Exclusion</name>
+      <version>4.0.0</version>
+      <description>
+        <![CDATA[
+        The <code>&lt;exclusion&gt;</code> element contains informations required to exclude
+        an artifact to the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>artifactId</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The artifact ID of the project to exclude.
+            ]]>
+          </description>
+          <type>String</type>
+          <required>true</required>
+        </field>
+        <field>
+          <name>groupId</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The group ID of the project to exclude.
+            ]]>
+          </description>
+          <type>String</type>
+          <required>true</required>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>IssueManagement</name>
+      <description>
+        Information about the issue tracking (or bug tracking) system
+        used to manage this project.
+      </description>
+      <version>4.0.0</version>
+      <fields>
+        <field>
+          <name>system</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The name of the issue management system, e.g. Bugzilla
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            URL for the issue management system used by the project.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>DistributionManagement</name>
+      <version>4.0.0</version>
+      <description>
+        <![CDATA[
+        This elements describes all that pertains to distribution for a project.
+        It is primarily used for deployment of artifacts and the site
+        produced by the build.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>repository</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Information needed to deploy the artifacts generated by the project to a remote repository.
+            ]]>
+          </description>
+          <association>
+            <type>DeploymentRepository</type>
+          </association>
+        </field>
+        <field>
+          <name>snapshotRepository</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Where to deploy snapshots of artifacts to. If not given, it defaults to the
+            <code>repository</code> element.
+            ]]>
+          </description>
+          <association>
+            <type>DeploymentRepository</type>
+          </association>
+        </field>
+        <field>
+          <name>site</name>
+          <description>
+            <![CDATA[
+            Information needed for deploying the web site of the project.
+            ]]>
+          </description>
+          <version>4.0.0</version>
+          <association>
+            <type>Site</type>
+          </association>
+        </field>
+        <field>
+          <name>downloadUrl</name>
+          <version>4.0.0+</version>
+          <description>
+            <![CDATA[
+            The URL of the project's download page. If not given users will be
+            referred to the homepage given by <code>url</code>.
+            This is given to assist in locating artifacts that are not in the repository due to
+            licensing restrictions.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>relocation</name>
+          <version>4.0.0</version>
+          <description>
+            Relocation information of the artifact if it has been moved
+            to a new group ID and/or artifact ID.
+          </description>
+          <association>
+            <type>Relocation</type>
+          </association>
+        </field>
+        <field>
+          <name>status</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Gives the status of this artifact in the remote repository.
+            This must not be set in your local project, as it is updated by
+            tools placing it in the reposiory. Valid values are: <code>none</code> (default),
+            <code>converted</code> (repository manager converted this from an Maven 1 POM),
+            <code>partner</code>
+            (directly synced from a partner Maven 2 repository), <code>deployed</code> (was deployed from a Maven 2
+            instance), <code>verified</code> (has been hand verified as correct and final).
+            ]]>
+          </description>
+          <required>false</required>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>License</name>
+      <description>
+        <![CDATA[
+        Describes the licenses for this project.  This is used to generate
+        the license page of the project's web site, as well as being taken into
+        consideration in other reporting and validation. The licenses listed for
+        the project are that of the project itself, and not of dependencies.
+        ]]>
+      </description>
+      <version>3.0.0+</version>
+      <fields>
+        <field>
+          <name>name</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The full legal name of the license.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The official url for the license text.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>distribution</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The primary method by which this project may be distributed.
+            <dl>
+              <dt>repo</dt>
+              <dd>may be downloaded from the Maven repository</dd>
+              <dt>manual</dt>
+              <dd>user must manually download and install the dependency.</dd>
+            </dl>
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>comments</name>
+          <description>
+            Addendum information pertaining to this license.
+          </description>
+          <version>3.0.0+</version>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>MailingList</name>
+      <version>3.0.0+</version>
+      <description>
+        <![CDATA[
+        This element describes all of the mailing lists associated with
+        a project. The auto-generated site references this information.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>name</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The name of the mailing list.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>subscribe</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The email address or link that can be used to subscribe to the mailing list.
+            If this is an email address, a
+            <code>mailto:</code> link will automatically be created when
+            the documentation is created.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>unsubscribe</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The email address or link that can be used to unsubscribe to
+            the mailing list.  If this is an email address, a
+            <code>mailto:</code> link will automatically be created
+            when the documentation is created.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>post</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The email address or link that can be used to post to
+            the mailing list.  If this is an email address, a
+            <code>mailto:</code> link will automatically be created
+            when the documentation is created.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>archive</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The link to a URL where you can browse the mailing list archive.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>otherArchives</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The link to alternate URLs where you can browse the list archive.
+            ]]>
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+      <comment>
+        We could probably have a specific element for a dev mailing list
+        for things like CI, and maybe even a specific element for the
+        user and scm mailing lists. Then leave the more lose structure
+        for any other type of mailing list.
+      </comment>
+    </class>
+    <class>
+      <name>Organization</name>
+      <description>
+        Specifies the organization that produces this project.
+      </description>
+      <version>3.0.0+</version>
+      <fields>
+        <field>
+          <name>name</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The full name of the organization.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            The URL to the organization's home page.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>logo</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The URL to the organization's logo image.  This can be an URL relative
+            to the base directory of the generated web site,
+            (e.g., <code>/images/org-logo.png</code>) or an absolute URL
+            (e.g., <code>http://my.corp/logo.png</code>).  This value is used
+            when generating the project documentation.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>PackageGroup</name>
+      <version>3.0.0</version>
+      <description>A JavaDoc package group.</description>
+      <fields>
+        <field>
+          <name>title</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The title to use for the package group.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>packages</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The packages in the group
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>PatternSet</name>
+      <version>3.0.0+</version>
+      <description>
+        <![CDATA[
+        Definition of include or exclude patterns.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>includes</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            A list of patterns to include, e.g. <code>**&#47;*.xml</code>.
+            ]]>
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+        <field>
+          <name>excludes</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            A list of patterns to exclude, e.g. <code>**&#47;*.xml</code>
+            ]]>
+          </description>
+          <association>
+            <type>String</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Parent</name>
+      <version>4.0.0</version>
+      <description>
+        <![CDATA[
+        The <code>&lt;parent&gt;</code> element contains informations required to the parent project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>artifactId</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The artifact id of the parent project to inherit from.
+            ]]>
+          </description>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>groupId</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The group id of the parent project to inherit from.
+            ]]>
+          </description>
+          <required>true</required>
+          <type>String</type>
+        </field>
+        <field>
+          <name>version</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The version of the parent project to inherit.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>relativePath</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The relative path of the parent <code>pom.xml</code> file within the check out.
+            The default value is <code>../pom.xml</code>.
+            Maven looks for the parent pom first in the reactor of currently building projects, then in this location on
+            the filesystem, then the local repository, and lastly in the remote repo.
+            <code>relativePath</code> allows you to select a different location,
+            for example when your structure is flat, or deeper without an intermediate parent pom.
+            However, the group ID, artifact ID and version are still required,
+            and must match the file in the location given or it will revert to the repository for the POM.
+            This feature is only for enhancing the development in a local checkout of that project.
+            ]]>
+          </description>
+          <type>String</type>
+          <defaultValue>../pom.xml</defaultValue>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @return the id as <code>groupId:artifactId:version</code>
+     */
+    public String getId()
+    {
+        StringBuffer id = new StringBuffer();
+
+        id.append( getGroupId() );
+        id.append( ":" );
+        id.append( getArtifactId() );
+        id.append( ":" );
+      //  id.append( getPackaging() );
+        id.append( ":" );
+        id.append( getVersion() );
+
+        return id.toString();
+    }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+
+    </class>
+    <class>
+      <name>Repository</name>
+      <version>3.0.0</version>
+      <description>
+        <![CDATA[
+        The <code>&lt;repository&gt;</code> element contains informations required to a repository
+        used by the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>connection</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The source control management system URL
+            that describes the repository and how to connect to the
+            repository. For more information, see the
+            <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
+            and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+            This connection is read-only.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>developerConnection</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            Just like <code>connection</code>, but for developers, i.e. this scm connection
+            will not be read only.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Scm</name>
+      <version>4.0.0</version>
+      <description>
+        <![CDATA[
+        The <code>&lt;scm&gt;</code> element contains informations required to the SCM
+        (Source Control Management) of the project.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>connection</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The source control management system URL
+            that describes the repository and how to connect to the
+            repository. For more information, see the
+            <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
+            and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+            This connection is read-only.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>developerConnection</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Just like <code>connection</code>, but for developers, i.e. this scm connection
+            will not be read only.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>tag</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The tag of current code. By default, it's set to HEAD during development.
+            ]]>
+          </description>
+          <type>String</type>
+          <defaultValue>HEAD</defaultValue>
+        </field>
+        <field>
+          <name>url</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>FileSet</name>
+      <version>3.0.0+</version>
+      <superClass>PatternSet</superClass>
+      <description>
+        <![CDATA[
+        A PatternSet for files.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>directory</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Describe the directory where the resources are stored.
+            The path is relative to the POM.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Resource</name>
+      <description>
+        <![CDATA[
+        This element describes all of the classpath resources associated with a project or
+        unit tests.
+        ]]>
+      </description>
+      <version>3.0.0+</version>
+      <superClass>FileSet</superClass>
+      <fields>
+        <field>
+          <name>targetPath</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Describe the resource target path. For example, if you want that
+            resource to appear in a specific package
+            (<code>org.apache.maven.messages</code>), you must specify this
+            element with this value: <code>org/apache/maven/messages</code>.
+            This is not required if you simply put the resources in that directory
+            structure at the source, however.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>filtering</name>
+          <version>3.0.0+</version>
+          <description>
+            <![CDATA[
+            Whether resources are filtered to replace tokens with parameterised values or not.
+            The values are taken from the <code>properties</code> element and from the
+            properties in the files listed in the <code>filters</code> element.
+            ]]>
+          </description>
+          <type>boolean</type>
+          <defaultValue>false</defaultValue>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>SourceModification</name>
+      <description>
+        <![CDATA[
+        This element describes all of the source modifications associated with a
+        project. These modifications are used
+        to exclude or include various source depending on the environment
+        the build is running in.
+        ]]>
+      </description>
+      <version>3.0.0</version>
+      <superClass>FileSet</superClass>
+      <fields>
+        <field>
+          <name>className</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            If the class with this name can <strong>not</strong> be
+            loaded, then the includes and excludes specified below
+            will be applied to the contents of the <code>sourceDirectory</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>property</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            If the property with this name is <strong>not</strong> set,
+            then the includes and excludes specified below
+            will be applied to the contents of the <code>sourceDirectory</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>UnitTest</name>
+      <version>3.0.0</version>
+      <superClass>PatternSet</superClass>
+      <description>
+        <![CDATA[
+        A PatternSet for unit tests.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>resources</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The classpath resources to use when executing the unit tests.
+              ]]>
+          </description>
+          <association>
+            <type>Resource</type>
+            <multiplicity>*</multiplicity>
+          </association>
+        </field>
+      </fields>
+    </class>
+    <class>
+      <name>Version</name>
+      <version>3.0.0</version>
+      <description>
+        <![CDATA[
+        This element describes each of the previous versions of the
+        project. Each version is described by a <code>version</code>
+        element
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>name</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The external version number under which this release was distributed. Examples include:
+            <code>1.0</code>,
+            <code>1.1-alpha1</code>,
+            <code>1.2-beta</code>,
+            <code>1.3.2</code> etc.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>tag</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            The name given in the SCM (e.g. CVS) used by the project for the source
+            code associated with this version of the project.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>id</name>
+          <version>3.0.0</version>
+          <description>
+            <![CDATA[
+            A unique identifier for a version. This is usually identical to the name.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>3.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @see java.lang.Object#toString()
+     */
+    public String toString()
+    {
+        return getId();
+    }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+
+    <class>
+      <name>RepositoryBase</name>
+      <version>4.0.0</version>
+      <description>
+        <![CDATA[
+         A repository contains the information needed
+         for establishing connections with remote repository.
+        ]]>
+      </description>
+      <fields>
+        <field>
+          <name>id</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            A unique identifier for a repository. This is used to match the repository
+            to configuration in the <code>settings.xml</code> file, for example.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>name</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            Human readable name of the repository.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>url</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The url of the repository, in the form <code>protocol://hostname/path</code>.
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field>
+          <name>layout</name>
+          <version>4.0.0</version>
+          <description>
+            <![CDATA[
+            The type of layout this repository uses for locating and storing artifacts -
+            can be <code>legacy</code> or <code>default</code>.
+            ]]>
+          </description>
+          <type>String</type>
+          <defaultValue>default</defaultValue>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( Object obj )
+    {
+        RepositoryBase other =  (RepositoryBase) obj;
+
+        boolean retValue = false;
+
+        if ( id != null )
+        {
+            retValue = id.equals( other.id );
+        }
+
+        return retValue;
+    }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+
+    <class>
+      <name>Repository</name>
+      <superClass>RepositoryBase</superClass>
+      <version>4.0.0</version>
+      <description>
+        A repository contains the information needed for establishing
+        connections with remote repository.
+      </description>
+      <fields>
+        <field>
+          <name>releases</name>
+          <version>4.0.0</version>
+          <description>
+            How to handle downloading of releases from this repository.
+          </description>
+          <association>
+            <type>RepositoryPolicy</type>
+          </association>
+        </field>
+        <field>
+          <name>snapshots</name>
+          <version>4.0.0</version>
+          <description>
+            How to handle downloading of snapshots from this repository.
+          </description>
+          <association>
+            <type>RepositoryPolicy</type>
+          </association>
+        </field>
+      </fields>
+      <!-- TODO:prevent modello generation of an incorrect equals method. Could be avoided by using <identity/> tags to mark ID as the only identity field -->
+      <codeSegments>
+        <codeSegment>
+          <version>4.0.0</version>
+          <code>
+            <![CDATA[
+    /**
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( Object obj )
+    {
+        return super.equals( obj );
+    }
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
+    </class>
+
+    <class>
+      <name>DeploymentRepository</name>
+      <superClass>RepositoryBase</superClass>
+      <version>4.0.0</version>
+      <description>
+        Repository contains the information needed for deploying to the

[... 1205 lines stripped ...]