<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-2004 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.
 */
 -->

<document>

  <properties>
    <author email="pete-apache-dev@kazmier.com">Pete Kazmier</author>
    <author email="dion@apache.org">dIon Gillard</author>
    <title>Maven Project Descriptors</title>
  </properties>

  <body>
    <section name="Maven Project Descriptors">
      <p>
        Maven utilizes an XML project descriptor to generate an object
        model for a project.  This object model can then be manipulated
        using an interface to the Maven.
        In the future, other interfaces may be provided such as a CLI or
        JMX.  This document describes the valid XML elements and
        attributes that constitute a Maven project descriptor.
      </p>
      <p>
        For reference, the XML schema used to validate the project
        descriptor is available in the <a
        href="http://cvs.apache.org/viewcvs.cgi/maven/src/xsd">CVS
        Repository</a>.  In addition, a sample project descriptor is
        presented in the <a href="../start/integrate.html">Integration</a>
        document. For those wondering, yes, Maven's build system is built 
        by Maven (we believe in eating our own dog food :)
      </p>
    </section>

    <section name="Descriptor with links">
      <source>
<a href="#project" class="required">&lt;project&gt;</a>
    <a href="#extend" class="optional">&lt;extend/&gt;</a>
    <a href="#pomVersion">&lt;pomVersion/&gt;</a>
    <a href="#id">&lt;id/&gt;</a>
    <a href="#name" title="short name for the project">&lt;name/&gt;</a>
    <a href="#groupId">&lt;groupId/&gt;</a>
    <a href="#currentVersion">&lt;currentVersion/&gt;</a>
    <a href="#organization">&lt;organization&gt;</a>
        <a href="#organization_name">&lt;name/&gt;</a>
        <a href="#organization_url">&lt;url/&gt;</a>
        <a href="#organization_logo">&lt;logo/&gt;</a>
    <a href="#organization">&lt;/organization&gt;</a>
    <a href="#inceptionYear">&lt;inceptionYear/&gt;</a>
    <a href="#package">&lt;package/&gt;</a>
    <a href="#logo">&lt;logo/&gt;</a>
    <a href="#gumpRepositoryId">&lt;gumpRepositoryId/&gt;</a>
    <a href="#description">&lt;description/&gt;</a>
    <a href="#shortDescription">&lt;shortDescription/&gt;</a>
    <a href="#url">&lt;url/&gt;</a>
    <a href="#issueTrackingUrl">&lt;issueTrackingUrl/&gt;</a>
    <a href="#siteAddress">&lt;siteAddress/&gt;</a>
    <a href="#siteDirectory">&lt;siteDirectory/&gt;</a>
    <a href="#distributionSite">&lt;distributionSite/&gt;</a>
    <a href="#distributionDirectory">&lt;distributionDirectory/&gt;</a>
    <a href="#repository">&lt;repository&gt;</a>
        <a href="#repository_connection">&lt;connection/&gt;</a>
        <a href="#repository_developerConnection">&lt;developerConnection/&gt;</a>
        <a href="#repository_url">&lt;url/&gt;</a>
    <a href="#repository">&lt;/repository&gt;</a>
    <a href="#versions">&lt;versions&gt;</a>
        <a href="#version">&lt;version&gt;</a>
            <a href="#version_id">&lt;id/&gt;</a>
            <a href="#version_name">&lt;name/&gt;</a>
            <a href="#version_tag">&lt;tag/&gt;</a>
        <a href="#version">&lt;/version&gt;</a>
    <a href="#versions">&lt;/versions&gt;</a>
    <a href="#branches">&lt;branches&gt;</a>
        <a href="#branch">&lt;branch&gt;</a>
            <a href="#branch_tag">&lt;tag/&gt;</a>
        <a href="#branch">&lt;/branch&gt;</a>
    <a href="#branches">&lt;/branches&gt;</a>
    <a href="#mailingLists">&lt;mailingLists&gt;</a>
        <a href="#mailingList">&lt;mailingList&gt;</a>
            <a href="#mailingList_name">&lt;name/&gt;</a>
            <a href="#mailingList_subscribe">&lt;subscribe/&gt;</a>
            <a href="#mailingList_unsubscribe">&lt;unsubscribe/&gt;</a>
            <a href="#mailingList_archive">&lt;archive/&gt;</a>
        <a href="#mailingList">&lt;/mailingList&gt;</a>
    <a href="#mailingLists">&lt;/mailingLists&gt;</a>
    <a href="#developers">&lt;developers&gt;</a>
        <a href="#developer">&lt;developer&gt;</a>
            <a href="#developer_name">&lt;name/&gt;</a>
            <a href="#developer_id">&lt;id/&gt;</a>
            <a href="#developer_email">&lt;email/&gt;</a>
            <a href="#developer_organization">&lt;organization/&gt;</a>
            <a href="#developer_roles">&lt;roles&gt;</a>
                <a href="#developer_roles">&lt;role/&gt;</a>
            <a href="#developer_roles">&lt;/roles&gt;</a>
            <a href="#developer_url">&lt;url/&gt;</a>
            <a href="#developer_timezone">&lt;timezone/&gt;</a>
        <a href="#developer">&lt;/developer&gt;</a>
    <a href="#developers">&lt;/developers&gt;</a>
    <a href="#contributors">&lt;contributors&gt;</a>
        <a href="#contributor">&lt;contributor&gt;</a>
            <a href="#contributor_name">&lt;name/&gt;</a>
            <a href="#contributor_email">&lt;email/&gt;</a>
            <a href="#contributor_organization">&lt;organization/&gt;</a>
            <a href="#contributor_roles">&lt;roles&gt;</a>
                <a href="#contributor_roles">&lt;role/&gt;</a>
            <a href="#contributor_roles">&lt;/roles&gt;</a>
            <a href="#contributor_url">&lt;url/&gt;</a>
            <a href="#contributor_timezone">&lt;timezone/&gt;</a>
        <a href="#contributor">&lt;/contributor&gt;</a>
    <a href="#contributors">&lt;/contributors&gt;</a>
    <a href="#licenses">&lt;licenses&gt;</a>
        <a href="#license">&lt;license&gt;</a>
            <a href="#license_name">&lt;name/&gt;</a>
            <a href="#license_url">&lt;url/&gt;</a>
            <a href="#license_distribution">&lt;distribution/&gt;</a>
        <a href="#license">&lt;/license&gt;</a>
    <a href="#licenses">&lt;/licenses&gt;</a>
    <a href="#dependencies">&lt;dependencies&gt;</a>
        <a href="#dependency">&lt;dependency&gt;</a>
            <a href="#dependency_id">&lt;id/&gt;</a>
            <a href="#dependency_groupId">&lt;groupId/&gt;</a>
            <a href="#dependency_artifactId">&lt;artifactId/&gt;</a>
            <a href="#dependency_version">&lt;version/&gt;</a>
            <a href="#dependency_jar">&lt;jar/&gt;</a>
            <a href="#dependency_type">&lt;type/&gt;</a>
            <a href="#dependency_url">&lt;url/&gt;</a>
            <a href="#dependency_properties">&lt;properties&gt;</a>
            <a href="#dependency_properties">&lt;/properties&gt;</a>
        <a href="#dependency">&lt;/dependency&gt;</a>
    <a href="#dependencies">&lt;/dependencies&gt;</a>
    <a href="#build">&lt;build&gt;</a>
        <a href="#build_nagEmailAddress">&lt;nagEmailAddress/&gt;</a>
        <a href="#sourceDirectory">&lt;sourceDirectory/&gt;</a>
        <a href="#sourceModifications">&lt;sourceModifications&gt;</a>
            <a href="#sourceModification">&lt;sourceModification&gt;</a>
                <a href="#sourceModification_className">&lt;className/&gt;</a>
                <a href="#sourceModification_includes">&lt;includes&gt;</a>
                    <a href="#sourceModification_includes">&lt;include/&gt;</a>
                <a href="#sourceModification_includes">&lt;/includes&gt;</a>
                <a href="#sourceModification_excludes">&lt;excludes&gt;</a>
                    <a href="#sourceModification_excludes">&lt;exclude/&gt;</a>
                <a href="#sourceModification_excludes">&lt;/excludes&gt;</a>
            <a href="#sourceModification">&lt;/sourceModification&gt;</a>
        <a href="#sourceModifications">&lt;/sourceModifications&gt;</a>
        <a href="#build_unitTestSourceDirectory">&lt;unitTestSourceDirectory/&gt;</a>
        <a href="#build_integrationUnitTestSourceDirectory">&lt;integrationUnitTestSourceDirectory/&gt;</a>
        <a href="#build_aspectSourceDirectory">&lt;aspectSourceDirectory/&gt;</a>
        <a href="#unitTest">&lt;unitTest&gt;</a>
            <a href="#unitTest_includes">&lt;includes&gt;</a>
                <a href="#unitTest_includes">&lt;include/&gt;</a>
            <a href="#unitTest_includes">&lt;/includes&gt;</a>
            <a href="#unitTest_excludes">&lt;excludes&gt;</a>
                <a href="#unitTest_excludes">&lt;exclude/&gt;</a>
            <a href="#unitTest_excludes">&lt;/excludes&gt;</a>
            <a href="#unitTest_resources">&lt;resources&gt;</a>
                <a href="#resource">&lt;resource&gt;</a>
                    <a href="#resource_directory">&lt;directory/&gt;</a>
                    <a href="#resource_targetPath">&lt;targetPath/&gt;</a>
                    <a href="#resource_includes">&lt;includes&gt;</a>
                        <a href="#resource_includes">&lt;include/&gt;</a>
                    <a href="#resource_includes">&lt;/includes&gt;</a>
                    <a href="#resource_excludes">&lt;excludes&gt;</a>
                        <a href="#resource_excludes">&lt;exclude/&gt;</a>
                    <a href="#resource_excludes">&lt;/excludes&gt;</a>
                <a href="#resource">&lt;/resource&gt;</a>
            <a href="#unitTest_resources">&lt;/resources&gt;</a>
        <a href="#unitTest">&lt;/unitTest&gt;</a>
        <a href="#resources">&lt;resources&gt;</a>
            <a href="#resource">&lt;resource&gt;</a>
                <a href="#resource_directory">&lt;directory/&gt;</a>
                <a href="#resource_targetPath">&lt;targetPath/&gt;</a>
                <a href="#resource_includes">&lt;includes&gt;</a>
                    <a href="#resource_includes">&lt;include/&gt;</a>
                <a href="#resource_includes">&lt;/includes&gt;</a>
                <a href="#resource_excludes">&lt;excludes&gt;</a>
                    <a href="#resource_excludes">&lt;exclude/&gt;</a>
                <a href="#resource_excludes">&lt;/excludes&gt;</a>
            <a href="#resource">&lt;/resource&gt;</a>
        <a href="#resources">&lt;/resources&gt;</a>
    <a href="#build">&lt;/build&gt;</a>
    <a href="#reports">&lt;reports&gt;</a>
        <a href="#report">&lt;report&gt;</a>
    <a href="#reports">&lt;/reports&gt;</a>
    <a href="#properties">&lt;properties/&gt;</a>
<a href="#project">&lt;/project&gt;</a>
      </source>
    </section>
    
    <section name="project">
      <p>
        The <code>&lt;project&gt;</code> element specifies various
        attributes about a project.  This is the root element of the
        project descriptor.  The following table lists all of the
        possible child elements.  Child elements with children are then
        documented further in subsequent sections.
      </p>
      <table>
        <tr><th>Element</th><th>Description</th></tr>
        <tr>
          <td><a name="extend">extend</a></td>
          <td>
            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 project.xml file.
            <source><![CDATA[<extend>${basedir}/../project.xml</extend>]]></source>
          </td>
        </tr>
        <tr>
          <td><a name="pomVersion">pomVersion</a></td>
          <td>
            The current version of the Maven project descriptor.  This
            version number enables Maven to automatically update an
            out-of-date project descriptor when a new version is
            available.  This version number should not be changed after
            the descriptor has been created.  Maven will update it
            automatically.
          </td>
        </tr>
        <tr>
          <td><a name="id">id</a></td>
          <td>
            The short name of the project.  This value is used when
            naming <a href="plugins/java/index.html">jars</a> and <a
            href="plugins/dist/index.html">distribution files</a>.
          </td>
        </tr>
        <tr>
          <td><a name="name">name</a></td>
          <td>
            The full name of the project.  This value is used when
            generating <a href="plugins/javadoc/index.html">JavaDoc</a>
            titles.
          </td>
        </tr>
        <tr>
          <td><a name="groupId">groupId</a></td>
          <td>
            The short name of the project group. This value is used to group
            all jars for a project in one directory. For more info look at the
            <a href="user-guide.html#Naming Conventions">user guide</a>.
          </td>
        </tr>
        <tr>
          <td><a name="currentVersion">currentVersion</a></td>
          <td>
            The current version of the project.  This value is used when
            naming <a href="plugins/java/index.html">jars</a> and <a
            href="plugins/dist/index.html">distribution files</a>.
          </td>
        </tr>
        <tr>
          <td><a href="#organization">organization</a></td>
          <td>
            The organization to which the project belongs.  This element
            describes various attributes of the organization.
          </td>
        </tr>
        <tr>
          <td><a name="inceptionYear">inceptionYear</a></td>
          <td>
            The year of the project's inception specified with 4 digits.
            This value is used when generating <a
            href="plugins/javadoc/index.html">JavaDoc</a> copyright
            notices.
          </td>
        </tr>
        <tr>
          <td><a name="package">package</a></td>
          <td>
            The Java package name of the project.  This value is used
            when generating <a
            href="plugins/javadoc/index.html">JavaDoc</a>.
          </td>
        </tr>
        <tr>
          <td><a name="logo">logo</a></td>
          <td>
            The URL to 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.
          </td>
        </tr>
        <tr>
          <td><a name="gumpRepositoryId">gumpRepositoryId</a></td>
          <td>
            Optional. This is the Id of the Gump repository that this project is
            part of (assuming it participates in the Gump integration
            effort).
          </td>
        </tr>
        <tr>
          <td><a name="description">description</a></td>
          <td>
            Optional. A detailed description of the project.  This element is
            usually specified as CDATA to enable the use of HTML tags
            within the description.  This description is used to
            generate the <a href="plugins/site/index.html">front page</a>
            of the project's web site.
          </td>
        </tr>
        <tr>
          <td><a name="shortDescription">shortDescription</a></td>
          <td>
            A short description of the project.  The short description
            should be limited to a single line.
          </td>
        </tr>
        <tr>
          <td><a name="url">url</a></td>
          <td>
            The URL to the project's homepage.
          </td>
        </tr>
        <tr>
          <td><a name="issueTrackingUrl">issueTrackingUrl</a></td>
          <td>
            Optional. The URL to the project's issue tracking system.
          </td>
        </tr>
        <tr>
          <td><a name="siteAddress">siteAddress</a></td>
          <td>
            Optional. The hostname of the web server that hosts the project's web
            site.  This is used when the web site is <a
              href="plugins/site/index.html">deployed</a>.
          </td>
        </tr>
        <tr>
          <td><a name="siteDirectory">siteDirectory</a></td>
          <td>
            Optional. The directory on the web server where the public web site
            for this project resides.  This is used when the web site is <a
            href="plugins/site/index.html">deployed</a>.
          </td>
        </tr>
        <tr>
          <td><a name="distributionSite">distributionSite</a></td>
          <td>
            Optional. The server server where the final
            distributions will be published.  This is used when the
            distributions are
            <a href="plugins/dist/index.html">deployed</a>.
            <p>
              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>
            </p>
          </td>
        </tr>
        <tr>
          <td><a name="distributionDirectory">distributionDirectory</a></td>
          <td>
            Optional. The directory on the web server where the final
            distributions will be published.  This is used when the
            distributions are
            <a href="plugins/dist/index.html">deployed</a>.
          </td>
        </tr>
        <tr>
          <td><a href="#repository">repository</a></td>
          <td>
            Information relating to the source configuration
            management system used by this project.
          </td>
        </tr>
        <tr>
          <td><a href="#versions">versions</a></td>
          <td>
            Optional. Contains information on previous versions of the
            project. This information is used when invoking the <a
            href="plugins/dist/index.html"><code>maven:dist</code></a>
            target.
          </td>
        </tr>
        <tr>
          <td><a href="#branches">branches</a></td>
          <td>
            Optional. Contains information on branches of the
            project. This information is used when invoking the <a
            href="plugins/dist/index.html"><code>maven:dist</code></a>
            target.
          </td>
        </tr>
        <tr>
          <td><a href="#mailingLists">mailingLists</a></td>
          <td>
            Contains information about a project's mailing lists.  This
            is used to generate the <a href="plugins/site/index.html">front
            page</a> of the site's web site.
          </td>
        </tr>
        <tr>
          <td><a href="#developers">developers</a></td>
          <td>
            Describes the committers to a project.  This is used to
            generate the <a href="plugins/site/index.html">Project Team</a>
            page of the project's web site.
          </td>
        </tr>
        <tr>
          <td><a href="#contributors">contributors</a></td>
          <td>
            Describes the contributors to a project.  This is used to generate
            the <a href="plugins/site/index.html">Project Team</a> page of
            the project's web site.
          </td>
        </tr>
        <tr>
          <td><a href="#licenses">licenses</a></td>
          <td>
            Describes the licenses for this project.  This is used to generate
            the <a href="plugins/site/index.html">License</a> page of
            the project's web site. Typically the licenses listed for the project
            are that of the project itself, and not of dependencies.
          </td>
        </tr>
        <tr>
          <td><a href="#dependencies">dependencies</a></td>
          <td>
            Describes the dependencies to a project.  This is used to
            when building a project.
          </td>
        </tr>
        <tr>
          <td><a href="#build">build</a></td>
          <td>
            Describes the build environment of a project.  This is used
            when invoking the build system.
          </td>
        </tr>
        <tr>
          <td><a href="#reports">reports</a></td>
          <td>
            Describes the reports that should be included as part of the
            Maven-generated site.
          </td>
        </tr>
        <tr>
          <td><a name="properties">properties</a></td>
          <td>
            Project properties that will be used by various plugins
          </td>
        </tr>
      </table>
    </section>
    <section name="organization">
      <p>
        This element describes various attributes of the organziation to
        which the project belongs.  These attributes are utilized when
        documentation is created (for copyright notices and links).
      </p>
      <table>
        <tr><th>Element</th><th>Description</th></tr>
        <tr>
          <td><a name="organization_name">name</a></td>
          <td>
            The full name of the organization.
          </td>
        </tr>
        <tr>
          <td><a name="organization_url">url</a></td>
          <td>
            The URL to the organization's home page.
          </td>
        </tr>
        <tr>
          <td><a name="organization_logo">logo</a></td>
          <td>
            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.
          </td>
        </tr>
      </table>
    </section>
    <section name="repository">
      <table>
        <tr><th>Element</th><th>Description</th></tr>
        <tr>
          <td><a name="repository_connection">connection</a></td>
          <td>
            <p>Optional.  The source configuration management system URL
            that describes the repository and how to connect to the
            repository.  This is used by Maven when <a
            href="plugins/dist/index.html">building versions</a>
            from specific ID.
            </p>
            <p>The format of this element is as follows:
              <pre>scm:&lt;provider&gt;:&lt;provider-parameters&gt;</pre>
            </p>
            <p>For cvs, the format for pserver repositories should be:
              <source><pre>scm:cvs:pserver:user@host:/cvs/root:module-name</pre></source>
            </p>
            <p>
              For local networked repositories (eg. pserver to local machine)
              <source><pre>scm:cvs:lserver:user@host:/cvs/root:module-name</pre></source>
            </p>
            <p>
              For ssh access:
              <source><pre>scm:cvs:ext:user@host:/cvs/root:module-name</pre></source>
              Remember that CVS will expect an environment variable called
              <code>CVS_RSH</code> to be set, typically to <code>ssh</code> or your
              ssh client.
            </p>
            <p>
              Some cvs clients support other protocols, such as ntserver and extssh.
              Here's an example using CVS NT and ntserver:
              <source>scm|cvs|ntserver|user@server|e:\cvs|Deployment</source>
              Note the use of the vertical bar as delimiter as the repository has a 
              colon (<code>:</code>) in it.
            </p>
            <p>
              For local file system repositories
              <source><pre>scm:cvs:local:ignored:/cvs/root:module-name</pre></source>
            </p>
            <p>
              For StarTeam access: 
              <source><pre>scm:starteam:username:password@host:port/project/view/folder</pre></source>
              All of this information can be had from either the StarTeam Universal 
              Client (Tools->Server Administration->Server Properties) or from the 
              administrator. 
            </p>
            <p>
                The delimiter is determined by the character after "scm". eg.
                <code>scm|cvs|pserver|user@host|/cvs/root|module-name</code> 
                is equivalent to that listed above. This can be useful for Windows users
                who have : in their cvsroot parameter (eg. D:\cvsroot)
            </p>
            <p>
              Where <code>pserver</code> is the protocol used to access CVS,
              <code>user@host</code> is the user name to log in to the specified
              cvs <strong>host</strong>, <code>/cvs/root</code> is the cvs root
              directory, and <code>module-name</code> is the name of the cvs
              module to be worked on
            </p>
            <p>As an example, the settings for an Apache project are usually:
              <pre>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:module-name</pre>
            </p>
            <p>
              Currently CVS, Starteam and  SubVersion are the only supported scm's.
              Others will be added as soon as possible
            </p>
          </td>
        </tr>
        <tr>
          <td><a name="repository_developerConnection">developerConnection</a></td>
          <td>
            Optional. Just like connection, but for developers, i.e. this scm connection
            will not be read only.
          </td>
        </tr>
        <tr>
          <td><a name="repository_url">url</a></td>
          <td>
            Optional. The URL to the project's browsable CVS repository
          </td>
        </tr>
      </table>
    </section>
    <section name="versions">
        <p>This element describes each of the previous versions of the
        project. Each version is described by a <code>version</code>
        element
        </p>
        <subsection name="version">
            <table>
                <tr><th>Element</th><th>Description</th></tr>
                <tr>
                    <td><a name="version_id">id</a></td>
                    <td>
                      A unique identifier for a version.  This ID is
                      used to specify the version that <a
                      href="plugins/dist/index.html"><code>maven:dist</code></a>
                      builds.
                    </td>
                </tr>
                <tr>
                    <td><a name="version_name">name</a></td>
                    <td>
                      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.
                    </td>
                </tr>
                <tr>
                    <td><a name="version_tag">tag</a></td>
                    <td>
                      The name given in the version control system
                      (e.g. cvs) used by the project for the source
                      code associated with this version of the
                      project.
                    </td>
                </tr>
            </table>
        </subsection>
    </section>
    <section name="branches">
        <p>This element describes each of the branches of the
        project. Each branch is described by a <code>tag</code>
        element
        </p>
        <subsection name="branch">
            <table>
                <tr><th>Element</th><th>Description</th></tr>
                <tr>
                    <td><a name="branch_tag">tag</a></td>
                    <td>
                      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.
                    </td>
                </tr>
            </table>
        </subsection>
    </section>
    <section name="mailingLists">
      <p>
        This element describes all of the mailing lists associated with
        a project.  Each mailing list is described by a
        <code>mailingList</code> element, which is then described by
        additional elements (described below).  The auto-generated site
        documentation references this information.
      </p>
      <subsection name="mailingList">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="mailingList_name">name</a></td>
            <td>The name of the mailing list.</td>
          </tr>
          <tr>
            <td><a name="mailingList_subscribe">subscribe</a></td>
            <td>
              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.
            </td>
          </tr>
          <tr>
            <td><a name="mailingList_unsubscribe">unsubscribe</a></td>
            <td>
              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.
            </td>
          </tr>
          <tr>
            <td>archive</td>
            <td>The link to a URL that can browse the archive.</td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="developers">
      <p>
        This element describes all of the developers associated with a
        project.  Each developer is described by a
        <code>developer</code> element, which is then described by
        additional elements (described below).  The auto-generated site
        documentation references this information.
      </p>
      <subsection name="developer">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="developer_name">name</a></td>
            <td>The full name of the developer.</td>
          </tr>
          <tr>
            <td><a name="developer_id">id</a></td>
            <td>The username of the developer.</td>
          </tr>
          <tr>
            <td><a name="developer_email">email</a></td>
            <td>The email address of the developer.</td>
          </tr>
          <tr>
            <td><a name="developer_organization">organization</a></td>
            <td>The organization to which the developer belongs.</td>
          </tr>
          <tr>
            <td><a name="developer_roles">roles</a></td>
            <td>
              The roles the developer plays in the project.  Each role is
              describe by a <code>role</code> element, the body of which is a
              role name.
            </td>
          </tr>
          <tr>
            <td><a name="developer_url">url</a></td>
            <td>The URL for the homepage of the developer</td>
          </tr>
          <tr>
            <td><a name="developer_timezone">timezone</a></td>
            <td>
              The timezone the developer is in. This is a number in the range
              -14 to 14.
            </td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="contributors">
      <p>
        This element describes all of the contributors associated with a
        project who are not developers.  Each contributor is described by a
        <code>contributor</code> element, which is then describe by additional
        elements (described below).  The auto-generated site documentation
        references this information.
      </p>
      <subsection name="contributor">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="contributor_name">name</a></td>
            <td>The full name of the contributor.</td>
          </tr>
          <tr>
            <td><a name="contributor_email">email</a></td>
            <td>The email address of the contributor.</td>
          </tr>
          <tr>
            <td><a name="contributor_organization">organization</a></td>
            <td>The organization to which the contributor belongs.</td>
          </tr>
          <tr>
            <td><a name="contributor_roles">roles</a></td>
            <td>
              The roles the contributor plays in the project.  Each role is
              describe by a <code>role</code> element, the body of which is a
              role name.
            </td>
          </tr>
          <tr>
            <td><a name="contributor_url">url</a></td>
            <td>The URL for the homepage of the contributor</td>
          </tr>
          <tr>
            <td><a name="contributor_timezone">timezone</a></td>
            <td>
              The timezone the contributor is in. This is a number in the range
              -14 to 14.
            </td>
          </tr>
        </table>
      </subsection>

    </section>
    <section name="licenses">
      <p>
        This element describes all of the licenses for this project.  Each license is described by a
        <code>license</code> element, which is then describe by additional
        elements (described below).  The auto-generated site documentation
        references this information.  Projects should only list the license(s) that
        applies to the project and not the licenses that apply to dependencies.
      </p>
      <subsection name="license">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="license_name">name</a></td>
            <td>The full legal name of the license.</td>
          </tr>
          <tr>
            <td><a name="license_url">url</a></td>
            <td>The official url for the license text.</td>
          </tr>
          <tr>
            <td><a name="license_distribution">distribution</a></td>
            <td>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>
            </td>
          </tr>
        </table>
      </subsection>

    </section>
    <section name="dependencies">
      <p>
        This element describes all of the dependencies associated with a
        project.  Each dependency is described by a
        <code>dependency</code> element, which is then described by
        additional elements (described below).
      </p>
      <p>
        These dependencies are used to construct a classpath for your project
        during the build process.
      </p>
      <p>
        Maven can automatically download these
        dependencies from a <a href="user-guide.html#Remote Repository Layout">remote repository</a>.
      </p>
      <p>
        The filename that Maven downloads from the repository is 
        <code>artifactId-version.jar</code> where <code>artifactId</code> corresponds to the <code>artifactId</code>
        element and <code>version</code> corresponds to the
        <code>version</code> element.
      </p>
      <p>
        When Maven goes looking for a dependency in the remote repository, it uses
        the dependency element to construct the URL to download from. This URL is
        defined as:
      </p>
      <source>
${repo}/${groupId}/${type}s/${artifactId}-${version}.${type}
      </source>
      <p>
        Where
        <dl>
          <dt>repo</dt>
          <dd>is the remote repository URL specified by <code>${maven.repo.remote}</code></dd>
          <dt>groupId</dt>
          <dd>is taken from the dependency element</dd>
          <dt>type</dt>
          <dd>is taken from the dependency element</dd>
          <dt>artifactId</dt>
          <dd>is taken from the dependency element</dd>
          <dt>version</dt>
          <dd>is taken from the dependency element</dd>
        </dl>
      </p>
      <subsection name="dependency">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="dependency_id">id</a></td>
            <td>
              <p>The name of the dependency.</p>
              <p>
                <strong>Note:</strong> The use of the id element for
                a dependency is deprecated. Please use <code>groupId</code> and
                <code>artifactId</code> together instead.
              </p>
            </td>
          </tr>
          <tr>
            <td><a name="dependency_groupId">groupId</a></td>
            <td>
              The project group that produced the dependency, e.g. <code>jboss</code>.
            </td>
          </tr>
          <tr>
            <td><a name="dependency_artifactId">artifactId</a></td>
            <td>
              The unique id for an artifact produced by the project group, e.g.
              <code>jboss-boot</code>
            </td>
          </tr>
          <tr>
            <td><a name="dependency_version">version</a></td>
            <td>The version of the dependency., e.g. <code>3.2.1</code></td>
          </tr>
          <tr>
            <td><a name="dependency_jar">jar</a></td>
            <td>
              The name of jar file if it doesn't respect 
              <code>&lt;artifactId&gt;-&lt;version&gt;.jar pattern.</code></td>
          </tr>
          <tr>
            <td><a name="dependency_type">type</a></td>
            <td>
              The type of dependency. This defaults to <code>jar</code>.
              <p>
                Other known and recognised dependency types are: 
                <code>ejb</code> and <code>plugin</code>.
              </p>
            </td>
          </tr>
          <tr>
            <td><a name="dependency_url">url</a></td>
            <td>
              The url of the dependency's homepage.
              <p>
                This url will be provided to the user if the jar file cannot be downloaded
                from the central repository.
              </p>
            </td>
          </tr>
          <tr>
            <td><a name="dependency_properties">properties</a></td>
            <td>
              Properties about the dependency.
              <p>
                Various plugins allow you to 
                <code>mark</code> dependencies with properties. For example the 
                <a href="plugins/war/index.html">war</a> plugin looks for a 
                <code>war.bundle</code> property, and if found will include the dependency
                in <code>WEB-INF/lib</code>. For example syntax, check the war plugin docs.
              </p>
              <p>
                There are two special properties that are built into the maven core for
                specifying the location of the dependency:
                <ul>
                  <li>
                    <b><code>project.path</code></b> specifies a path relative to the
                    <code>project.xml</code> file to locate the dependency.  If it cannot
                    find the file specified by this property then it will attempt to use the
                    following value.
                  </li>
                  <li>
                    <b><code>local.path</code></b> specifies a path relative to the
                    local file system to locate the dependency.  <code>project.path</code>
                    has a higher priority than this one, so if the <code>project.path</code>
                    property exists (and the file it refers to exists as well) it will override the 
                    value here.  If the value referred by this property does not exist in
                    the file system, then it will use the standard maven resolution methods
                    <i>with no log messages</i>.
                  </li>
                </ul>
              </p>
              <p>
                Please note that theoretically you can specify the values above by using the
                <code>maven.jar.&lt;id&gt;</code> property in <code>project.properties</code>
                this will allow you to retain the &lt;groupId&gt; and &lt;artifactId&gt; tags
                in your dependency (which is the way it should be as a the &lt;id&gt; tag is
                deprecated.
              </p>
            </td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="build">
      <p>
        This element describes all of the build properties associated
        with a project.  There are several elements that describe a
        project's build environment.  Each one is described below:
      </p>
      <table>
        <tr><th>Element</th><th>Description</th></tr>
        <tr>
          <td><a name="build_nagEmailAddress">nagEmailAddress</a></td>
          <td>
            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. Currently this is used by the
            <a href="plugins/gump/">gump plugin</a>
            target.
          </td>
        </tr>
        <tr>
          <td><a name="sourceDirectory">sourceDirectory</a></td>
          <td>
            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.
          </td>
        </tr>
        <tr>
          <td><a href="#sourceModifications">sourceModifications</a></td>
          <td>
            This element specifies how source code will be excluded or included
            depending on the presence of a given class. e.g.
          </td>
        </tr>
        <tr>
          <td><a name="build_unitTestSourceDirectory">unitTestSourceDirectory</a></td>
          <td>
            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 unit tests must use the JUnit test framework.
            The path given is relative to the project descriptor.
          </td>
        </tr>
        <tr>
          <td><a name="build_integrationUnitTestSourceDirectory">integrationUnitTestSourceDirectory</a></td>
          <td>
            This element is deprecated 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
            <a href="http://jakarta.apache.org/cactus/integration/maven/properties.html">Cactus 
            plugin properties page</a>.            
          </td>
        </tr>
        <tr>
          <td><a name="build_aspectSourceDirectory">aspectSourceDirectory</a></td>
          <td>
            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 (see the <a
            href="plugins/aspectj/goals.html">Aspectj goals</a> document).
            The path given is relative to the project descriptor.
          </td>
        </tr>
        <tr>
          <td><a href="#unitTest">unitTest</a></td>
          <td>This element specifies unit tests associated with the project.</td>
        </tr>
        <tr>
          <td><a href="#resources">resources</a></td>
          <td>Describe the resources associated with the project</td>
        </tr>
      </table>
      <subsection name="sourceModifications">
        <p>
          This element describes all of the sourceModifications associated with a
          project.  Each source modification is described by a
         <code>sourceModification</code> element, which is then described by
         additional elements (described below).  These modifications are used 
         to exclude or include various source depending on the environment
         the build is running in.
        </p>
        
        <p><a name="sourceModification">sourceModification elements</a></p>
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="sourceModification_className">className</a></td>
            <td>
              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 
              <a href="#sourceDirectory">sourceDirectory</a>
            </td>
          </tr>
          <tr>
            <td><a name="sourceModification_includes"><a href="#includes">includes</a></a></td>
            <td>Describe the files to be included if the class was not found</td>
          </tr>
          <tr>
            <td><a name="sourceModification_excludes"><a href="#excludes">excludes</a></a></td>
            <td>Describe the files to be excluded if the class was not found</td>
          </tr>
        </table>
        <p>
          <strong>Note</strong>: not all plugins support the sourceModifications element.
        </p>
        <p>
          An example below always excludes the classes beginning with <code>EJS</code>
          and <code>_</code>.
        </p>
        <source><![CDATA[
    <sourceModifications>
      <sourceModification>
        <className>fakeClass</className>
        <excludes>
          <exclude>**/EJS*.java</exclude>
          <exclude>**/_*.java</exclude>
        </excludes>
      </sourceModification>
    </sourceModifications>
]]></source>

      </subsection>
      <subsection name="unitTest">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="unitTest_includes"><a href="#includes">includes</a></a></td>
            <td>Describe the includes unit tests</td>
          </tr>
          <tr>
            <td><a name="unitTest_excludes"><a href="#excludes">excludes</a></a></td>
            <td>Describe the excludes unit tests</td>
          </tr>
          <tr>
            <td><a name="unitTest_resources"><a href="#resources">resources</a></a></td>
            <td>Describe the resources associated with unit tests</td>
          </tr>
        </table>
      </subsection>
      <subsection name="resources">
        <p>
          This element describes all of the resources associated with a project or unit tests.
          Each resource is described by a resource element, which is then described by additional
          elements (described <a href="#resource">below</a>). These resources are used to
          complete the jar file or to run unit test.
        </p>
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a href="#resource">resource</a></td>
            <td>Each resource must be defined in a <tt>resource</tt> element.</td>
          </tr>
        </table>
        <p>
          Here's an example <code>resources</code> block
        </p>
        <source><![CDATA[
    <!-- J A R  R E S O U R C E S -->
    <!-- Resources that are packaged up inside the JAR file -->
    <resources>
      <resource>
        <directory>${basedir}/src/resources/misc</directory>
        <includes>
          <include>*.xsd</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}/src/resources/logging</directory>
        <includes>
          <include>log4j.properties</include>
        </includes>
      </resource>
    </resources>
]]></source>
      </subsection>
      
      <subsection name="resource">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="resource_directory">directory</a></td>
            <td>
              Describe the directory where the resource is stored.
              The path may be absolute, or relative to the project.xml file.
            </td>
          </tr>
          <tr>
            <td><a name="resource_targetPath">targetPath</a></td>
            <td>
              Describe the resource target path. For example, if you want that resource
              appear into a specific package (<code>org.apache.maven.messages</code>), you must specify this
              element with this value : <code>org/apache/maven/messages</code>
            </td>
          </tr>
          <tr>
            <td><a name="resource_includes"><a href="#includes">includes</a></a></td>
            <td>Describe the includes files to the project</td>
          </tr>
          <tr>
            <td><a name="resource_excludes"><a href="#excludes">excludes</a></a></td>
            <td>Describe the excludes files to the project</td>
          </tr>
          <tr>
            <td><a name="resource_filtering">filtering</a></td>
            <td>Boolean. Describe if resources are filtered or not.</td>
          </tr>
        </table>
      </subsection>
      <subsection name="includes">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="include">include</a></td>
            <td>
              This element specifies an 
              <a href="http://ant.apache.org/manual/CoreTypes/patternset.html">Ant pattern</a>
              of files to include in a list.
            </td>
          </tr>
        </table>
      </subsection>
      <subsection name="excludes">
        <table>
          <tr><th>Element</th><th>Description</th></tr>
          <tr>
            <td><a name="exclude">exclude</a></td>
            <td>
              This element specifies an 
              <a href="http://ant.apache.org/manual/CoreTypes/patternset.html">Ant pattern</a>
              of files to exclude from a list.
            </td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="reports">
      <p>
        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.
      </p>
      <table>
        <tr><th>Element</th><th>Description</th></tr>
        <tr>
          <td><a name="report">report</a></td>
          <td>
            The name of the report that should be run when the site is
            generated.  There is an established naming convention that
            is to be used when specifying reports.  If you want the
            report that is generated by a plugin called
            <code>xyz</code>, then you would specify the following for
            the value of this element: <code>maven-xyz-plugin</code>.
          </td>
        </tr>
      </table>
    </section>
  </body>
</document>

