maven/maven-model/maven.mdo

3053 lines
104 KiB
XML

<?xml version="1.0"?>
<!--
|
| 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>
<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 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.
]]></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 project.xml file.
<div class="source"><pre>&lt;extend&gt;${basedir}/../project.xml&lt;/extend&gt;</pre></div>
]]></description>
<type>String</type>
</field>
<field>
<name>parent</name>
<version>4.0.0</version>
<description><![CDATA[Information on which parent POM to extend.]]></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[
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.
]]></description>
</field>
<field>
<name>id</name>
<version>3.0.0</version>
<required>true</required>
<description><![CDATA[
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>.
]]></description>
<type>String</type>
</field>
<field>
<name>groupId</name>
<version>3.0.0+</version>
<required>true</required>
<description><![CDATA[
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="/reference/conventions.html">user guide</a>.
]]></description>
<type>String</type>
</field>
<field>
<name>artifactId</name>
<version>3.0.0+</version>
<required>true</required>
<description><![CDATA[
The short name of the project. This value is used in conjunction
with <code>groupId</code>
when naming <a href="/plugins/java/index.html">jars</a> and
<a href="/plugins/dist/index.html">distribution files</a>.
]]></description>
<type>String</type>
</field>
<field>
<name>packaging</name>
<version>4.0.0</version>
<description><![CDATA[The type of artifact this project produces.]]></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. This value is used when
generating <a href="/plugins/javadoc/index.html">JavaDoc</a>
titles.
]]></description>
<type>String</type>
</field>
<field>
<name>currentVersion</name>
<description><![CDATA[
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>.
]]></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[
Optional. A detailed description of the project.
This description is used as the default to generate the
<a href="/plugins/site/index.html">Mailing Lists</a> of the project's
web site, and is shown when <code>maven --usage</code> is called on
the project. While this element can be specified as CDATA to enable
the use of HTML tags within the description, you are encouraged to
provide an alternative home page using <code>xdocs/index.xml</code>
if this is required.
]]></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 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.
]]></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[
Optional. The URL to 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 information.]]></description>
<association>
<type>IssueManagement</type>
</association>
</field>
<field>
<name>ciManagement</name>
<version>4.0.0</version>
<description><![CDATA[The project's continuous integration management 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
<a href="/plugins/javadoc/index.html">JavaDoc</a> copyright notices.
]]></description>
<type>String</type>
</field>
<field>
<name>gumpRepositoryId</name>
<version>3.0.0</version>
<description><![CDATA[
Optional. This is the Id of the Gump repository that this project is
part of (assuming it participates in the Gump integration
effort).
]]></description>
<type>String</type>
</field>
<field>
<name>siteAddress</name>
<version>3.0.0</version>
<description><![CDATA[
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>.
]]></description>
<type>String</type>
</field>
<field>
<name>siteDirectory</name>
<version>3.0.0</version>
<description><![CDATA[
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>.
]]></description>
<type>String</type>
</field>
<field>
<name>distributionSite</name>
<version>3.0.0</version>
<description><![CDATA[
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>
]]></description>
<type>String</type>
<comment>This naming is inconsistent and distribution should occur from a repository structure.</comment>
</field>
<field>
<name>distributionDirectory</name>
<version>3.0.0</version>
<description><![CDATA[
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>.
]]></description>
<type>String</type>
<comment>This naming is inconsistent and distribution should occur from a repository structure.</comment>
</field>
<field>
<name>mailingLists</name>
<version>3.0.0+</version>
<description><![CDATA[
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.
]]></description>
<association>
<type>MailingList</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>developers</name>
<version>3.0.0+</version>
<description><![CDATA[
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.
]]></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. This is used to generate
the <a href="/plugins/site/index.html">Project Team</a> page of
the project's web site.
]]></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 (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.
]]></description>
<association>
<type>License</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>versions</name>
<version>3.0.0</version>
<description><![CDATA[
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.
]]></description>
<association>
<type>Version</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>branches</name>
<version>3.0.0</version>
<description><![CDATA[
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.
]]></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.]]></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.]]></description>
<association>
<type>Repository</type>
</association>
<comment>This element needs to be renamed as it conflicts with the existing notion of repositories in
Maven.</comment>
</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>
<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
]]></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 <a href="/plugins/javadoc/index.html">JavaDoc</a>.
]]></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[
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[
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>ModelBase</name>
<version>3.0.0+</version>
<fields>
<field>
<name>modules</name>
<version>4.0.0</version>
<description>The modules to build in addition to the current project</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]]></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]]></description>
<association>
<type>Repository</type>
<multiplicity>*</multiplicity>
</association>
<comment>This may be removed or relocated in the near future. It is undecided whether plugins really need a
remote repository set of their own.</comment>
</field>
<field>
<name>dependencies</name>
<version>3.0.0+</version>
<description><![CDATA[
<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%20Repository%20Layout">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>
<div class="source">
<pre>${repo}/${groupId}/${type}s/${artifactId}-${version}.${type}</pre>
</div>
<p>
Where
</p>
<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>
]]></description>
<association>
<type>Dependency</type>
<multiplicity>*</multiplicity>
</association>
<comment>These should ultimately only be compile time dependencies when transitive dependencies come into
play.</comment>
</field>
<field>
<name>reports</name>
<version>4.0.0</version>
<description><![CDATA[
NOT A VALID ELEMENT. LISTED TO ALLOW LEGACY REPOSITORY POMs TO PARSE.
]]></description>
<type>DOM</type>
</field>
<field>
<name>reporting</name>
<version>4.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>Reporting</type>
</association>
</field>
<field>
<name>dependencyManagement</name>
<version>4.0.0</version>
<required>false</required>
<description><![CDATA[
Default dependency information for grouped projects inheriting from
this one. The dependency information here will not be checked.
Instead, when a POM derived from this one declares a dependency
described by a groupId and an artifactId (version not necessary),
the entries in here will supply default values for that dependency.
Any locally-supplied information for a particular dependency will
overwrite any information specified here for that project.
]]></description>
<association>
<type>DependencyManagement</type>
</association>
</field>
<field>
<name>distributionManagement</name>
<version>4.0.0</version>
<description><![CDATA[Distribution information for a project.]]></description>
<association>
<type>DistributionManagement</type>
</association>
</field>
<field>
<name>properties</name>
<version>4.0.0</version>
<description><![CDATA[
Properties used to fill in plugin configuration
]]></description>
<type>Properties</type>
<association xml.mapStyle="inline">
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<!-- @todo: is any of this too CVS specific? Investigate other SCMs -->
<class>
<name>Branch</name>
<version>3.0.0</version>
<description><![CDATA[
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.
]]></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>
<fields>
<field>
<name>plugins</name>
<version>4.0.0</version>
<description>
The plugins specified here are not validated until they
are referenced in a POM within the group. This allows the
specification of a "standard" version for a particular
plugin.
</description>
<association>
<type>Plugin</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
java.util.Map pluginMap;
public void flushPluginMap()
{
this.pluginMap = null;
}
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>
<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 validated 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>
<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 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.
]]></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 resources associated with a
project's 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.
]]></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 is placed.
]]></description>
<type>String</type>
</field>
<field>
<name>finalName</name>
<version>4.0.0</version>
<description><![CDATA[
The filename (including an extension, but with no path information) that the produced artifact
will be called. The default value is artifactId-version.extension (where extension is derived from
type).
]]></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>
<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. Currently this is used by the
<a href="/plugins/gump/">gump plugin</a>
target.
]]></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 unit tests must use the JUnit test framework.
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 unit tests must use the JUnit test framework.
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 (see the
<a
href="/plugins/aspectj/goals.html">Aspectj goals</a> document).
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 specifies a directory containing integration test
sources of the project.
]]></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. 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.
]]></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>
<fields>
<field>
<name>system</name>
<version>4.0.0</version>
<description><![CDATA[The name of the continuous integration system i.e. Bugzilla]]></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.]]></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>Send notification on error.</description>
</field>
<field>
<name>sendOnFailure</name>
<version>4.0.0</version>
<defaultValue>true</defaultValue>
<type>boolean</type>
<description>Send notification on failure.</description>
</field>
<field>
<name>sendOnSuccess</name>
<version>4.0.0</version>
<defaultValue>true</defaultValue>
<type>boolean</type>
<description>Send notification on success.</description>
</field>
<field>
<name>sendOnWarning</name>
<version>4.0.0</version>
<defaultValue>true</defaultValue>
<type>boolean</type>
<description>Send notification 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>
Where to send the notification to - eg email address. DEPRECATED.
</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>
<version>3.0.0+</version>
<description><![CDATA[The organization to which the contributor belongs.]]></description>
<type>String</type>
</field>
<field>
<name>organizationUrl</name>
<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.
]]></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>
<fields>
<field>
<name>id</name>
<version>3.0.0</version>
<required>true</required>
<description><![CDATA[
<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>
]]></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>geronimo</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>germonimo-jms</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>
]]></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>
<comment>The URL should really be gleaned from a shared database of dependency information.</comment>
</field>
<field>
<name>jar</name>
<version>3.0.0</version>
<description><![CDATA[
Literal name of the artifact. 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>.
Known recognised dependency types are:
<ul>
<li><code>jar</code></li>
<li><code>ejb</code></li>
<li><code>plugin</code></li>
</ul>
]]></description>
<type>String</type>
<defaultValue>jar</defaultValue>
</field>
<field>
<name>classifier</name>
<version>4.0.0</version>
<description>
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.
</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
<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.
]]></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 - compile, runtime, test. Used to
calculate the various classpaths used for testing, etc. and for
determining which artifacts to include in a distribution of this
project. For more information, see
<a href="http://maven.apache.org/maven2/dependencies-mechanism.html">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>FOR SYSTEM SCOPE ONLY. This specifies the path on the filesystem for this
dependency.</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[
public String toString()
{
return groupId + "/" + type + "s:" + artifactId + "-" + version;
}
]]></code>
</codeSegment>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
public String toString()
{
return "Dependency {groupId=" + groupId + ", artifactId=" + artifactId + ", version=" + version + ", type=" + type + "}";
}
]]></code>
</codeSegment>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
public String getManagementKey()
{
return groupId + ":" + artifactId + ":" + type + (classifier != null ? ":" + classifier : "");
}
]]></code>
</codeSegment>
<codeSegment>
<version>3.0.0</version>
<code><![CDATA[
public String getKey()
{
return getId() + ":" + getType();
}
public String getArtifactDirectory()
{
return getGroupId();
}
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 );
}
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() );
}
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. Derived from
<code>Contributor</code>.
]]></description>
<version>3.0.0+</version>
<fields>
<field>
<name>id</name>
<version>3.0.0+</version>
<description><![CDATA[The username of the developer.]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>Exclusion</name>
<version>4.0.0</version>
<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 bugtracking 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 i.e. 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 distributions
produced by the build.
]]></description>
<fields>
<field>
<name>repository</name>
<version>4.0.0</version>
<description><![CDATA[
Information needed for deploying to remote repository artifacts
generated by the project
]]></description>
<association>
<type>RepositoryBase</type>
</association>
</field>
<field>
<name>snapshotRepository</name>
<version>4.0.0</version>
<description>
Where to deploy snapshots of artifacts to. If not given, it defaults to the repository.
</description>
<association>
<type>RepositoryBase</type>
</association>
</field>
<field>
<name>site</name>
<description><![CDATA[
Information needed for deploying website files 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>.
]]></description>
<type>String</type>
</field>
<field>
<name>relocation</name>
<version>4.0.0</version>
<description>Relocation information if the artifact has been moved to a new group/artifactId</description>
<association>
<type>Relocation</type>
</association>
</field>
<field>
<name>status</name>
<version>4.0.0</version>
<description>
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: none (default),
converted (repository manager converted this from an Maven 1 POM), partner (directly synced from a partner
Maven 2 repository), deployed (was deployed from a Maven 2 instance), verified (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 <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.
]]></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. 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.
]]></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 other 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 who 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>
<fields>
<field>
<name>title</name>
<version>3.0.0</version>
<description><![CDATA[the description]]></description>
<type>String</type>
</field>
<field>
<name>packages</name>
<version>3.0.0</version>
<description><![CDATA[the description]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>PatternSet</name>
<version>3.0.0+</version>
<fields>
<field>
<name>includes</name>
<version>3.0.0+</version>
<description><![CDATA[the description]]></description>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>excludes</name>
<version>3.0.0+</version>
<description><![CDATA[the description]]></description>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<class>
<name>Parent</name>
<version>4.0.0</version>
<fields>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<description><![CDATA[The artifact id of the project to extend.]]></description>
<required>true</required>
<type>String</type>
</field>
<field>
<name>groupId</name>
<version>4.0.0</version>
<description><![CDATA[The group id of the project to extend.]]></description>
<required>true</required>
<type>String</type>
</field>
<field>
<name>version</name>
<version>4.0.0</version>
<description><![CDATA[The version of the project to extend.]]></description>
<type>String</type>
</field>
<field>
<name>relativePath</name>
<version>4.0.0</version>
<description><![CDATA[The relative path of the parent-pom within the project hierarchy]]></description>
<type>String</type>
<defaultValue>../pom.xml</defaultValue>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
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>
<fields>
<field>
<name>connection</name>
<version>3.0.0</version>
<description><![CDATA[
<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:
</p>
<pre>scm:&lt;provider&gt;:&lt;provider-parameters&gt;</pre>
<p>For cvs, the format for pserver repositories should be:</p>
<div class="source">
<pre>scm:cvs:pserver:user@host:/cvs/root:module-name</pre>
</div>
<p>
For local networked repositories (eg. pserver to local machine)
</p>
<div class="source">
<pre>scm:cvs:lserver:user@host:/cvs/root:module-name</pre>
</div>
<p>
For ssh access:
</p>
<div class="source">
<pre>scm:cvs:ext:user@host:/cvs/root:module-name</pre>
</div>
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>
Some cvs clients support other protocols, such as ntserver and extssh.
Here's an example using CVS NT and ntserver:
</p>
<div class="source">
<pre>scm|cvs|ntserver|user@server|e:\cvs|Deployment</pre>
</div>
Note the use of the vertical bar as delimiter as the repository has a
colon (<code>:</code>) in it.
<p>
For local file system repositories
</p>
<div class="source">
<pre>scm:cvs:local:ignored:/cvs/root:module-name</pre>
</div>
<p>
For StarTeam access:
</p>
<div class="source">
<pre>scm:starteam:username:password@host:port/project/view/folder</pre>
</div>
All of this information can be had from either the StarTeam Universal
Client (Tools-&gt;Server Administration-&gt;Server Properties) or from the
administrator.
<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:</p>
<pre>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:module-name</pre>
<p>
Currently CVS, Starteam and SubVersion are the only supported scm's.
Others will be added as soon as possible
</p>
]]></description>
<type>String</type>
</field>
<field>
<name>developerConnection</name>
<version>3.0.0</version>
<description><![CDATA[
Just like connection, 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 CVS repository.]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>Scm</name>
<version>4.0.0</version>
<fields>
<field>
<name>connection</name>
<version>4.0.0</version>
<description><![CDATA[
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.
]]></description>
<type>String</type>
</field>
<field>
<name>developerConnection</name>
<version>4.0.0</version>
<description><![CDATA[
Just like connection, 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 CVS repository.]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>FileSet</name>
<version>3.0.0+</version>
<superClass>PatternSet</superClass>
<fields>
<field>
<name>directory</name>
<version>3.0.0+</version>
<description><![CDATA[
Describe the directory where the resource is stored.
The path may be absolute, or relative to the project.xml file.
]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>Resource</name>
<description><![CDATA[
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.
]]></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 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>
]]></description>
<type>String</type>
</field>
<field>
<name>filtering</name>
<version>3.0.0+</version>
<description><![CDATA[Boolean. Describe if resources are filtered or not.]]></description>
<type>boolean</type>
<defaultValue>false</defaultValue>
</field>
</fields>
</class>
<class>
<name>SourceModification</name>
<description><![CDATA[
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.
]]></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
<a href="#sourceDirectory">sourceDirectory</a>
]]></description>
<type>String</type>
</field>
<field>
<name>property</name>
<version>3.0.0</version>
<description><![CDATA[the description]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>UnitTest</name>
<version>3.0.0</version>
<superClass>PatternSet</superClass>
<fields>
<field>
<name>resources</name>
<version>3.0.0</version>
<description><![CDATA[the description]]></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 version control system (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 ID is
used to specify the version that
<a href="/plugins/dist/index.html">
<code>maven:dist</code>
</a> builds.
]]></description>
<type>String</type>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>3.0.0</version>
<code><![CDATA[
public String toString()
{
return getId();
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>RepositoryBase</name>
<version>4.0.0</version>
<description><![CDATA[
Repository contains the information needed
for establishing connections with remote repoistory
]]></description>
<fields>
<field>
<name>id</name>
<version>4.0.0</version>
<description><![CDATA[
A unique identifier for a repository.
]]></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
]]></description>
<type>String</type>
</field>
<field>
<name>layout</name>
<version>4.0.0</version>
<description>The type of layout this repository uses for locating and storing artifacts - can be "legacy" or
"default".</description>
<type>String</type>
<defaultValue>default</defaultValue>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
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>
Repository contains the information needed for establishing connections with remote repoistory
</description>
<fields>
<!-- TODO: deprecated -->
<field>
<name>snapshotPolicy</name>
<version>4.0.0</version>
<description>
The policy for downloading snapshots - can be "always", "daily" (default), "interval:XXX" (in minutes) or
"never" (repository is not checked, even if the snapshot is not present locally).
</description>
<type>String</type>
</field>
<!-- TODO: deprecated -->
<field>
<name>checksumPolicy</name>
<version>4.0.0</version>
<description>What to do when verification of an artifact checksum fails - warn, fail, etc. Valid values are
"fail" or "warn"</description>
<type>String</type>
</field>
<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>
<!-- 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[
public boolean equals( Object obj )
{
return super.equals( obj );
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>RepositoryPolicy</name>
<version>4.0.0</version>
<description>Download policy</description>
<fields>
<field>
<name>enabled</name>
<version>4.0.0</version>
<description>Whether to use this repository for downloading this type of artifact</description>
<type>boolean</type>
<defaultValue>true</defaultValue>
</field>
<field>
<name>updatePolicy</name>
<version>4.0.0</version>
<description>
The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or
"never" (only if it doesn't exist locally).
</description>
<type>String</type>
</field>
<field>
<name>checksumPolicy</name>
<version>4.0.0</version>
<description>What to do when verification of an artifact checksum fails - warn, fail, etc. Valid values are
"fail" or "warn"</description>
<type>String</type>
</field>
</fields>
</class>
<!--@todo find better solution for management of site deployments -->
<class>
<name>Site</name>
<version>4.0.0</version>
<description><![CDATA[
Site contains the information needed
for deploying websites.
]]></description>
<fields>
<field>
<name>id</name>
<version>4.0.0</version>
<description><![CDATA[
A unique identifier for a deployment locataion.
]]></description>
<type>String</type>
</field>
<field>
<name>name</name>
<version>4.0.0</version>
<description><![CDATA[
Human readable name of the deployment location
]]></description>
<type>String</type>
</field>
<field>
<name>url</name>
<version>4.0.0</version>
<description><![CDATA[
The url of the location where website is deployed
]]></description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>ConfigurationContainer</name>
<version>4.0.0</version>
<fields>
<field>
<name>inherited</name>
<version>4.0.0</version>
<description>
<![CDATA[Whether this container's configuration should be propagated to child POMs.]]></description>
<type>String</type>
</field>
<field>
<name>configuration</name>
<type>DOM</type>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
private boolean inheritanceApplied = true;
public void unsetInheritanceApplied()
{
this.inheritanceApplied = false;
}
public boolean isInheritanceApplied()
{
return inheritanceApplied;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>Plugin</name>
<version>4.0.0</version>
<superClass>ConfigurationContainer</superClass>
<fields>
<field>
<name>groupId</name>
<version>4.0.0</version>
<type>String</type>
<required>true</required>
<defaultValue>org.apache.maven.plugins</defaultValue>
</field>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<type>String</type>
<required>true</required>
</field>
<field>
<name>version</name>
<version>4.0.0</version>
<required>true</required>
<description><![CDATA[The version of the plugin to be used.]]></description>
<type>String</type>
</field>
<field>
<name>extensions</name>
<version>4.0.0</version>
<type>boolean</type>
<description>Whether to load Maven extensions (such as packaging and type handlers) from this
plugin</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>executions</name>
<version>4.0.0</version>
<description>Multiple specifications of a set of goals, each having (possibly) different
configuration</description>
<association>
<type>PluginExecution</type>
<multiplicity>*</multiplicity>
</association>
</field>
<!-- TODO: this is deprecated -->
<field>
<name>goals</name>
<version>4.0.0</version>
<association>
<type>Goal</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
private java.util.Map executionMap = null;
public void flushExecutionMap()
{
this.executionMap = null;
}
public java.util.Map getExecutionsAsMap()
{
if ( executionMap == null )
{
executionMap = new java.util.HashMap();
if ( getExecutions() != null )
{
for ( java.util.Iterator i = getExecutions().iterator(); i.hasNext(); )
{
PluginExecution exec = (PluginExecution) i.next();
if ( executionMap.containsKey( exec.getId() ) )
{
throw new IllegalStateException( "You cannot have two plugin executions with the same (or missing) <id/> elements.\nOffending execution\n\nId: \'" + exec.getId() + "\'\nPlugin:\'" + getKey() + "\'\n\n" );
}
executionMap.put( exec.getId(), exec );
}
}
}
return executionMap;
}
public String getKey()
{
return constructKey( groupId, artifactId );
}
public static String constructKey( String groupId, String artifactId )
{
return groupId + ":" + artifactId;
}
/** @deprecated */
private java.util.Map goalMap = null;
/** @deprecated */
public void flushGoalMap()
{
this.goalMap = null;
}
/** @deprecated */
public java.util.Map getGoalsAsMap()
{
if ( goalMap == null )
{
goalMap = new java.util.HashMap();
if ( goals != null )
{
for ( java.util.Iterator i = goals.iterator(); i.hasNext(); )
{
Goal g = (Goal) i.next();
goalMap.put( g.getId(), g );
}
}
}
return goalMap;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>PluginExecution</name>
<version>4.0.0</version>
<superClass>ConfigurationContainer</superClass>
<fields>
<field>
<name>id</name>
<version>4.0.0</version>
<required>true</required>
<type>String</type>
<defaultValue>default</defaultValue>
</field>
<field>
<name>phase</name>
<version>4.0.0</version>
<type>String</type>
</field>
<field>
<name>goals</name>
<version>4.0.0</version>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<!-- TODO: deprecated -->
<class>
<name>Goal</name>
<version>4.0.0</version>
<fields>
<field>
<name>id</name>
<version>4.0.0</version>
<type>String</type>
</field>
<field>
<name>configuration</name>
<type>DOM</type>
</field>
</fields>
</class>
<class>
<name>DependencyManagement</name>
<version>4.0.0</version>
<description>
Section for management of default dependency information for use in a group of POMs.
</description>
<fields>
<field>
<name>dependencies</name>
<version>4.0.0</version>
<description>
The dependencies specified here are not validated until they
are referenced in a POM within the group. This allows the
specification of a "standard" version for a particular
dependency.
</description>
<association>
<type>Dependency</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<class>
<name>PluginManagement</name>
<version>4.0.0</version>
<superClass>PluginContainer</superClass>
<description>
Section for management of default plugin information for use in a group of POMs.
</description>
</class>
<class>
<name>Reporting</name>
<version>4.0.0</version>
<description>Section for management of reports and configuration</description>
<fields>
<field>
<name>excludeDefaults</name>
<version>4.0.0</version>
<type>boolean</type>
<description>If true, then the default reports are not included in the site generation</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>outputDirectory</name>
<version>4.0.0</version>
<type>String</type>
<description>Where to store all of the generated reports</description>
</field>
<field>
<name>plugins</name>
<version>4.0.0</version>
<description>The report plugins) to use and their configuration</description>
<association>
<type>ReportPlugin</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
java.util.Map reportPluginMap;
public void flushReportPluginMap()
{
this.reportPluginMap = null;
}
public java.util.Map getReportPluginsAsMap()
{
if ( reportPluginMap == null )
{
reportPluginMap = new java.util.HashMap();
if ( getPlugins() != null )
{
for ( java.util.Iterator it = getPlugins().iterator(); it.hasNext(); )
{
ReportPlugin reportPlugin = (ReportPlugin) it.next();
reportPluginMap.put( reportPlugin.getKey(), reportPlugin );
}
}
}
return reportPluginMap;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<!-- Profile support -->
<class>
<name>Profile</name>
<superClass>ModelBase</superClass>
<version>4.0.0</version>
<description><![CDATA[
Modifications to the build process which is keyed on some
sort of environmental parameter.
]]></description>
<fields>
<field>
<name>id</name>
<required>true</required>
<version>4.0.0</version>
<type>String</type>
<description>The ID of this build profile, for activation
purposes.</description>
</field>
<field>
<name>activation</name>
<version>4.0.0</version>
<description><![CDATA[The conditional logic which will automatically
trigger the inclusion of this profile.]]></description>
<association>
<type>Activation</type>
</association>
</field>
<field xml.tagName="build">
<name>build</name>
<version>4.0.0</version>
<required>true</required>
<description><![CDATA[Information required to build the project.]]></description>
<association>
<type>BuildBase</type>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
// We don't want this to be parseable...it's sort of 'hidden'
// default source for this profile is in the pom itself.
private String source = "pom";
public void setSource( String source )
{
this.source = source;
}
public String getSource()
{
return source;
}
public String toString()
{
return "Profile {id: " + getId() + ", source: " + getSource() + "}";
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>Activation</name>
<version>4.0.0</version>
<description><![CDATA[
The conditions within the build runtime environment which will trigger
the automatic inclusion of the parent build profile.
]]></description>
<fields>
<field>
<name>activeByDefault</name>
<version>4.0.0</version>
<type>boolean</type>
<description>Flag specifying whether this profile is active as a default.</description>
</field>
<field>
<name>jdk</name>
<version>4.0.0</version>
<type>String</type>
<description><![CDATA[
Specifies that this profile will be activated when a matching JDK is detected.
]]></description>
</field>
<field>
<name>property</name>
<version>4.0.0</version>
<description><![CDATA[
Specifies that this profile will be activated when this System property is specified.
]]></description>
<association>
<type>ActivationProperty</type>
</association>
</field>
<field>
<name>file</name>
<version>4.0.0</version>
<description><![CDATA[
Specifies that this profile will be activated based on existence of a file.
]]></description>
<association>
<type>ActivationFile</type>
</association>
</field>
</fields>
</class>
<class>
<name>ActivationProperty</name>
<version>4.0.0</version>
<description><![CDATA[
This is the property specification used to activate a profile. If the value field is empty,
then the existence of the named property will activate the profile, otherwise it does a case-sensitive
match against the property value as well.
]]></description>
<fields>
<field>
<name>name</name>
<version>4.0.0</version>
<type>String</type>
<required>true</required>
<description>The name of the property to be used to activate a profile</description>
</field>
<field>
<name>value</name>
<version>4.0.0</version>
<type>String</type>
<description>The value of the property to be used to activate a profile</description>
</field>
</fields>
</class>
<class>
<name>ActivationFile</name>
<version>4.0.0</version>
<description><![CDATA[
This is the file specification used to activate a profile. The missing value will be a the location
of a file that needs to exist, and if it doesn't the profile must run. On the other hand exists will test
for the existence of the file and if it is there will run the profile.
]]></description>
<fields>
<field>
<name>missing</name>
<version>4.0.0</version>
<type>String</type>
<description>The name of the file that should be missing to activate a profile</description>
</field>
<field>
<name>exists</name>
<version>4.0.0</version>
<type>String</type>
<description>The name of the file that should exist to activate a profile</description>
</field>
</fields>
</class>
<!-- /BuildProfile support -->
<class xml.tagName="plugin">
<name>ReportPlugin</name>
<version>4.0.0</version>
<fields>
<field>
<name>groupId</name>
<version>4.0.0</version>
<type>String</type>
<required>true</required>
<defaultValue>org.apache.maven.plugins</defaultValue>
</field>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<type>String</type>
<required>true</required>
</field>
<field>
<name>version</name>
<version>4.0.0</version>
<description><![CDATA[The version of the reporter to be used.]]></description>
<type>String</type>
</field>
<field>
<name>inherited</name>
<version>4.0.0</version>
<type>String</type>
</field>
<field>
<name>configuration</name>
<version>4.0.0</version>
<type>DOM</type>
</field>
<field>
<name>reportSets</name>
<version>4.0.0</version>
<description>Multiple specifications of a set of reports, each having (possibly) different
configuration</description>
<association>
<type>ReportSet</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
private java.util.Map reportSetMap = null;
public void flushReportSetMap()
{
this.reportSetMap = null;
}
public java.util.Map getReportSetsAsMap()
{
if ( reportSetMap == null )
{
reportSetMap = new java.util.HashMap();
if ( getReportSets() != null )
{
for ( java.util.Iterator i = getReportSets().iterator(); i.hasNext(); )
{
ReportSet reportSet = (ReportSet) i.next();
reportSetMap.put( reportSet.getId(), reportSet );
}
}
}
return reportSetMap;
}
public String getKey()
{
return constructKey( groupId, artifactId );
}
public static String constructKey( String groupId, String artifactId )
{
return groupId + ":" + artifactId;
}
private boolean inheritanceApplied = true;
public void unsetInheritanceApplied()
{
this.inheritanceApplied = false;
}
public boolean isInheritanceApplied()
{
return inheritanceApplied;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>ReportSet</name>
<version>4.0.0</version>
<description>Represents a set of reports and configuration to be used to generate them.</description>
<fields>
<field>
<name>id</name>
<type>String</type>
<required>true</required>
<description>The unique id for this report set, to be used during POM inheritance.</description>
</field>
<field>
<name>configuration</name>
<version>4.0.0</version>
<type>DOM</type>
</field>
<field>
<name>inherited</name>
<version>4.0.0</version>
<type>String</type>
</field>
<field>
<name>reports</name>
<version>4.0.0</version>
<required>true</required>
<description><![CDATA[
The list of reports from this reporter/plugin which should be generated from this set
(this configuration)
]]></description>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
private boolean inheritanceApplied = true;
public void unsetInheritanceApplied()
{
this.inheritanceApplied = false;
}
public boolean isInheritanceApplied()
{
return inheritanceApplied;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>Prerequisites</name>
<version>4.0.0</version>
<description>Describes the prerequisites a project can have</description>
<fields>
<field>
<name>maven</name>
<version>4.0.0</version>
<type>String</type>
<defaultValue>2.0-beta</defaultValue>
<description>The minimum version of Maven required</description>
<required>false</required>
</field>
</fields>
</class>
<class>
<name>Relocation</name>
<version>4.0.0</version>
<description>Describes where an artifact has moved to. If any of the values are omitted, it is assumed to be the
same as it was before.</description>
<fields>
<field>
<name>groupId</name>
<version>4.0.0</version>
<description>The group the artifact has moved to</description>
<type>String</type>
</field>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<description>The new artifact ID of the artifact</description>
<type>String</type>
</field>
<field>
<name>version</name>
<version>4.0.0</version>
<description>The new version of the artifact</description>
<type>String</type>
</field>
<field>
<name>message</name>
<version>4.0.0</version>
<description>An additional message to show the user about the move, such as the reason.</description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>Extension</name>
<version>4.0.0</version>
<description>Describes a build extension to utilise</description>
<fields>
<field>
<name>groupId</name>
<version>4.0.0</version>
<description>The group of the extension's artifact.</description>
<required>true</required>
<type>String</type>
</field>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<description>The artifact ID of the extension</description>
<required>true</required>
<type>String</type>
</field>
<field>
<name>version</name>
<version>4.0.0</version>
<description>The version of the extension</description>
<type>String</type>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>4.0.0</version>
<code><![CDATA[
public boolean equals( Object o )
{
if ( this == o )
{
return true;
}
if ( !( o instanceof Extension ) )
{
return false;
}
Extension e = (Extension) o;
if ( !e.getArtifactId().equals( getArtifactId() ) )
{
return false;
}
else if ( !e.getGroupId().equals( getGroupId() ) )
{
return false;
}
else if ( e.getVersion() != null ? !e.getVersion().equals( getVersion() ) : getVersion() != null )
{
return false;
}
return true;
}
public int hashCode()
{
int result = 17;
result = 37 * result + getArtifactId().hashCode();
result = 37 * result + getGroupId().hashCode();
result = 37 * result + getVersion() != null ? getVersion().hashCode() : 0;
return result;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
</classes>
</model>