You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2018/03/11 08:16:26 UTC
[maven-studies] 01/01: initial consumer POM model cleanup from
build model
This is an automated email from the ASF dual-hosted git repository.
hboutemy pushed a commit to branch consumer-pom
in repository https://gitbox.apache.org/repos/asf/maven-studies.git
commit f0d594a02db3d10feaa1f871dd99d1a58fb3067f
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Sun Mar 11 09:04:15 2018 +0100
initial consumer POM model cleanup from build model
---
.gitignore | 15 +
pom.xml | 119 ++
src/main/mdo/maven-consumer.mdo | 1366 ++++++++++++++++++
src/main/mdo/maven.mdo | 3010 +++++++++++++++++++++++++++++++++++++++
src/site/apt/index.apt | 38 +
src/site/site.xml | 60 +
6 files changed, 4608 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f79c928
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+target/
+.project
+.classpath
+.settings/
+.svn/
+bin/
+# Intellij
+*.ipr
+*.iml
+.idea
+out/
+.DS_Store
+/bootstrap
+/dependencies.xml
+.java-version
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..ff4361a
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven</artifactId>
+ <version>3.5.3</version>
+ </parent>
+
+ <artifactId>maven-consumer-pom</artifactId>
+
+ <name>Maven Consumer POM Model study</name>
+ <description>Consumer POM Model study: see https://cwiki.apache.org/confluence/display/MAVEN/Build+vs+Consumer+POM</description>
+ <url>https://maven.apache.org/studies/consumer-pom/</url>
+
+ <scm>
+ <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven-studies.git</connection>
+ <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven-studies.git</developerConnection>
+ <url>https://github.com/apache/maven-studies/tree/${project.scm.tag}</url>
+ <tag>consumer-pom</tag>
+ </scm>
+ <distributionManagement>
+ <site>
+ <id>apache.website</id>
+ <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url>
+ </site>
+ </distributionManagement>
+
+ <properties>
+ <checkstyle.violation.ignore>FileLength</checkstyle.violation.ignore>
+ <maven.site.path>studies/consumer-pom</maven.site.path>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <configuration>
+ <version>4.0.0</version>
+ <models>
+ <model>src/main/mdo/maven.mdo</model>
+ <model>src/main/mdo/maven-consumer.mdo</model>
+ </models>
+ </configuration>
+ </plugin>
+ <!-- don't install or deploy artifact: this study is not intended for that currently -->
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <!-- site mono-module svnpubsub deployment optimization -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-site-plugin</artifactId>
+ <configuration>
+ <skipDeploy>true</skipDeploy><!-- don't deploy site with maven-site-plugin -->
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-scm-publish-plugin</artifactId>
+ <version>3.0.0</version>
+ <configuration>
+ <content>${project.reporting.outputDirectory}</content><!-- mono-module doesn't require site:stage -->
+ </configuration>
+ <executions>
+ <execution>
+ <id>scm-publish</id>
+ <phase>site-deploy</phase><!-- deploy site with maven-scm-publish-plugin -->
+ <goals>
+ <goal>publish-scm</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/src/main/mdo/maven-consumer.mdo b/src/main/mdo/maven-consumer.mdo
new file mode 100644
index 0000000..1075cd6
--- /dev/null
+++ b/src/main/mdo/maven-consumer.mdo
@@ -0,0 +1,1366 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!--
+ | Improvements:
+ |
+ | 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. (see MNG-3626)
+ |
+ | 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 groupId/artifactId and sometimes version. It would be good to have them all extend one
+ | definition of these types
+ |
+-->
+<model xmlns="http://codehaus-plexus.github.io/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/1.4.0 http://codehaus-plexus.github.io/modello/xsd/modello-1.4.0.xsd"
+ xml.namespace="http://maven.apache.org/POM/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/maven-consumer-${version}.xsd">
+ <id>maven-consumer</id>
+ <name>MavenConsumer</name>
+ <description>
+ <![CDATA[
+ <p>This is a reference for the Maven Consumer project descriptor used in Maven.</p>
+ <p>An XSD is available at:</p>
+ <ul>
+ <li><a href="https://maven.apache.org/xsd/maven-4.0.0.xsd">https://maven.apache.org/xsd/maven-4.0.0.xsd</a> for Maven 2.0.</li>
+ </ul>
+ ]]>
+ </description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.consumer.model</value>
+ </default>
+ </defaults>
+ <classes>
+ <class rootElement="true" xml.tagName="project" java.clone.hook="cloneHook">
+ <name>Model</name>
+ <superClass>ModelBase</superClass>
+ <description>
+ <![CDATA[
+ The <code><project></code> element is the root of the descriptor.
+ The following table lists all of the possible child elements.
+ ]]>
+ </description>
+ <version>3.0.0+</version>
+ <fields>
+
+ <!-- ====================================================================== -->
+ <!-- Model Version -->
+ <!-- ====================================================================== -->
+
+ <field><!-- TBD keep in consumer? -->
+ <name>modelVersion</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>Declares to which version of project descriptor this POM conforms.</description>
+ <type>String</type>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- groupId/artifactId/Version/Packaging -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>groupId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ A universally unique identifier for a project. It is normal to
+ use a fully-qualified package name to distinguish it from other
+ projects with a similar name (eg. <code>org.apache.maven</code>).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The identifier for this artifact that is unique within the group given by the
+ group ID. An artifact is something that is either produced or used by a project.
+ Examples of artifacts produced by Maven for a project include: JARs, source and binary
+ distributions, and WARs.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>The current version of the artifact produced by this project.</description>
+ <type>String</type>
+ </field>
+ <field><!-- TBD keep in consumer? -->
+ <name>packaging</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of artifact this project produces, for example <code>jar</code>
+ <code>war</code>
+ <code>ear</code>
+ <code>pom</code>.
+ Plugins can create their own packaging, and
+ therefore their own packaging types,
+ so this list does not contain all possible types.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Elements which describe a project -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>name</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The full name of the project.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>3.0.0+</version>
+ <description>A detailed description of the project, used by Maven whenever it needs to
+ describe the project, such as on the web site. While this element can be specified as
+ CDATA to enable the use of HTML tags within the description, it is discouraged to allow
+ plain text representation. If you need to modify the index page of the generated web
+ site, you are able to specify your own instead of adjusting this text.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL to the project's homepage.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>inceptionYear</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The year of the project's inception, specified with 4 digits. This value is
+ used when generating copyright notices as well as being informational.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>organization</name>
+ <version>3.0.0+</version>
+ <description>This element describes various attributes of the organization to which the
+ project belongs. These attributes are utilized when documentation is created (for
+ copyright notices and links).</description>
+ <alias>organisation</alias>
+ <association>
+ <type>Organization</type>
+ </association>
+ </field>
+ <field>
+ <name>licenses</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ This element describes all of the licenses for this project.
+ Each license is described by a <code>license</code> element, which
+ is then described by additional elements.
+ Projects should only list the license(s) that applies to the project
+ and not the licenses that apply to dependencies.
+ If multiple licenses are listed, it is assumed that the user can select
+ any of them, not that they must accept all.
+ ]]>
+ </description>
+ <association>
+ <type>License</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>developers</name>
+ <version>3.0.0+</version>
+ <description>Describes the committers of a project.</description>
+ <association>
+ <type>Developer</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field><!-- TBD keep in consumer? -->
+ <name>contributors</name>
+ <version>3.0.0+</version>
+ <description>Describes the contributors to a project that are not yet committers.</description>
+ <association>
+ <type>Contributor</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Build prerequisites -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <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>
+
+ <!-- ====================================================================== -->
+ <!-- SCM -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>scm</name>
+ <version>4.0.0+</version>
+ <description>Specification for the SCM used by the project, such as CVS, Subversion, etc.</description>
+ <association>
+ <type>Scm</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Issue Tracking -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>issueManagement</name>
+ <version>4.0.0+</version>
+ <description>The project's issue management system information.</description>
+ <association>
+ <type>IssueManagement</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Profiles -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="repositories">
+ <name>profiles</name>
+ <version>4.0.0+</version>
+ <description>A listing of project-local build profiles which will modify the build process
+ when activated.</description>
+ <association>
+ <type>Profile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private void cloneHook( Model copy )
+ {
+ copy.pomFile = pomFile;
+ }
+
+ /**
+ * The POM from which this model originated. This is transient runtime state and therefore not managed by Modello.
+ */
+ private java.io.File pomFile;
+
+ /**
+ * Gets the POM file for the corresponding project (if any).
+ *
+ * @return The POM file from which this model originated or {@code null} if this model does not belong to a local
+ * project (e.g. describes the metadata of some artifact from the repository).
+ */
+ public java.io.File getPomFile()
+ {
+ return pomFile;
+ }
+
+ public void setPomFile( java.io.File pomFile )
+ {
+ this.pomFile = ( pomFile != null ) ? pomFile.getAbsoluteFile() : null;
+ }
+
+ /**
+ * Gets the base directory for the corresponding project (if any).
+ *
+ * @return The base directory for the corresponding project or {@code null} if this model does not belong to a local
+ * project (e.g. describes the metadata of some artifact from the repository).
+ */
+ public java.io.File getProjectDirectory()
+ {
+ return ( pomFile != null ) ? pomFile.getParentFile() : null;
+ }
+
+ /**
+ * @return the model id as <code>groupId:artifactId:packaging:version</code>
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 64 );
+
+ id.append( ( getGroupId() == null ) ? "[inherited]" : getGroupId() );
+ id.append( ":" );
+ id.append( getArtifactId() );
+ id.append( ":" );
+ id.append( getPackaging() );
+ id.append( ":" );
+ id.append( ( getVersion() == null ) ? "[inherited]" : getVersion() );
+
+ return id.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>ModelBase</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Base class for the <code>Model</code> and the <code>Profile</code> objects.
+ ]]>
+ </description>
+ <fields>
+ <field xdoc.separator="blank">
+ <name>dependencies</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ This element describes all of the dependencies associated with a
+ project.
+ These dependencies are used to construct a classpath for your
+ project during the build process. They are automatically downloaded from the
+ repositories defined in this project.
+ See <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+ dependency mechanism</a> for more information.
+ ]]>
+ </description>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank"><!-- TBD keep in consumer? -->
+ <name>repositories</name>
+ <version>4.0.0+</version>
+ <description>The lists of the remote repositories for discovering dependencies and
+ extensions.</description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <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>The full name of the contributor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>email</name>
+ <version>3.0.0+</version>
+ <description>The email address of the contributor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The URL for the homepage of the contributor.</description>
+ <type>String</type>
+ </field>
+ <!-- TODO: should this just be a single Organization element -->
+ <field>
+ <name>organization</name>
+ <alias>organisation</alias>
+ <version>3.0.0+</version>
+ <description>The organization to which the contributor belongs.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>organizationUrl</name>
+ <alias>organisationUrl</alias>
+ <version>3.0.0+</version>
+ <description>The URL of the organization.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>roles</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The roles the contributor plays in the project. Each role is described by a
+ <code>role</code> element, the body of which is a role name. This can also be used to
+ describe the contribution.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>timezone</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The timezone the contributor is in. Typically, this is a number in the range
+ <a href="http://en.wikipedia.org/wiki/UTC%E2%88%9212:00">-12</a> to <a href="http://en.wikipedia.org/wiki/UTC%2B14:00">+14</a>
+ or a valid time zone id like "America/Montreal" (UTC-05:00) or "Europe/Paris" (UTC+01:00).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>properties</name>
+ <version>3.0.0+</version>
+ <description>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 java.clone="deep">
+ <name>Dependency</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><dependency></code> element contains information about a dependency
+ of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The project group that produced the dependency, e.g.
+ <code>org.apache.maven</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The unique id for an artifact produced by the project group, e.g.
+ <code>maven-artifact</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The version of the dependency, e.g. <code>3.2.1</code>. In Maven 2, this can also be
+ specified as a range of versions.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of dependency. While it
+ usually represents the extension on the filename of the dependency,
+ that is not always the case. A type can be mapped to a different
+ extension and a classifier.
+ The type often corresponds to the packaging used, though this is also
+ not always the case.
+ Some examples are <code>jar</code>, <code>war</code>, <code>ejb-client</code>
+ and <code>test-jar</code>: see <a href="../maven-core/artifact-handlers.html">default
+ artifact handlers</a> for a list.
+ New types can be defined by plugins that set
+ <code>extensions</code> to <code>true</code>, so this is not a complete list.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+ <field>
+ <name>classifier</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The classifier of the dependency. It is appended to
+ the filename after the version. This allows:
+ <ul>
+ <li>referring to attached artifact, for example <code>sources</code> and <code>javadoc</code>:
+ see <a href="../maven-core/artifact-handlers.html">default artifact handlers</a> for a list,</li>
+ <li>distinguishing two artifacts
+ that belong to the same POM but were built differently.
+ For example, <code>jdk14</code> and <code>jdk15</code>.</li>
+ </ul>
+ ]]>
+ </description>
+ <type>String</type>
+ <required>false</required>
+ </field>
+ <field>
+ <name>scope</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The scope of the dependency - <code>compile</code>, <code>runtime</code>,
+ <code>test</code>, <code>system</code>, and <code>provided</code>. Used to
+ calculate the various classpaths used for compilation, testing, and so on.
+ It also assists in determining which artifacts to include in a distribution of
+ this project. For more information, see
+ <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+ dependency mechanism</a>. The default scope is <code>compile</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ <!-- This default has to be enforced at the maven-artifact layer, to allow
+ | injection of defaults from <dependencyManagement/>.
+ | TODO: how can we document it?
+ |-->
+ <!-- defaultValue>compile</defaultValue -->
+ </field>
+ <field>
+ <name>systemPath</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ FOR SYSTEM SCOPE ONLY. Note that use of this property is <b>discouraged</b>
+ and may be replaced in later versions. This specifies the path on the filesystem
+ for this dependency.
+ Requires an absolute path for the value, not relative.
+ Use a property that gives the machine specific absolute path,
+ e.g. <code>${java.home}</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>exclusions</name>
+ <version>4.0.0+</version>
+ <description>Lists a set of artifacts that should be excluded from this dependency's
+ artifact list when it comes to calculating transitive dependencies.</description>
+ <association>
+ <type>Exclusion</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>optional</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ 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. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isOptional()
+ {
+ return ( optional != null ) ? Boolean.parseBoolean( optional ) : false;
+ }
+
+ public void setOptional( boolean optional )
+ {
+ this.optional = String.valueOf( optional );
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Dependency {groupId=" + groupId + ", artifactId=" + artifactId + ", version=" + version + ", type=" + type + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private String managementKey;
+
+ /**
+ * @return the management key as <code>groupId:artifactId:type</code>
+ */
+ public String getManagementKey()
+ {
+ if ( managementKey == null )
+ {
+ managementKey = groupId + ":" + artifactId + ":" + type + ( classifier != null ? ":" + classifier : "" );
+ }
+ return managementKey;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <superClass>Contributor</superClass>
+ <name>Developer</name>
+ <description>Information about one of the committers on this project.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>3.0.0+</version>
+ <description>The unique ID of the developer in the SCM.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Exclusion</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><exclusion></code> element contains informations required to exclude
+ an artifact to the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>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>The group ID of the project to exclude.</description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>IssueManagement</name>
+ <description>Information about the issue tracking (or bug tracking) system used to manage this
+ project.</description>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>system</name>
+ <version>4.0.0+</version>
+ <description>The name of the issue management system, e.g. Bugzilla</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>URL for the issue management system used by the project.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>License</name>
+ <description>Describes the licenses for this project. This is used to generate the license
+ page of the project's web site, as well as being taken into consideration in other reporting
+ and validation. The licenses listed for the project are that of the project itself, and not
+ of dependencies.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full legal name of the license.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>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 java.clone="deep">
+ <name>Organization</name>
+ <description>Specifies the organization that produces this project.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full name of the organization.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The URL to the organization's home page.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Scm</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><scm></code> element contains informations required to the SCM
+ (Source Control Management) of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>connection</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The source control management system URL
+ that describes the repository and how to connect to the
+ repository. For more information, see the
+ <a href="https://maven.apache.org/scm/scm-url-format.html">URL format</a>
+ and <a href="https://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+ This connection is read-only.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>developerConnection</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Just like <code>connection</code>, but for developers, i.e. this scm connection
+ will not be read only.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>tag</name>
+ <version>4.0.0+</version>
+ <description>The tag of current code. By default, it's set to HEAD during development.</description>
+ <type>String</type>
+ <defaultValue>HEAD</defaultValue>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <name>RepositoryBase</name>
+ <version>4.0.0+</version>
+ <description>A repository contains the information needed for establishing connections with
+ remote repository.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <identifier>true</identifier>
+ <description>
+ <![CDATA[
+ A unique identifier for a repository. This is used to match the repository
+ to configuration in the <code>settings.xml</code> file, for example. Furthermore, the identifier is
+ used during POM inheritance and profile injection to detect repositories that should be merged.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <description>Human readable name of the repository.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The url of the repository, in the form <code>protocol://hostname/path</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of layout this repository uses for locating and storing artifacts -
+ can be <code>legacy</code> or <code>default</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ </field>
+ </fields>
+ </class>
+
+ <class><!-- TBD keep in consumer? -->
+ <name>Repository</name>
+ <superClass>RepositoryBase</superClass>
+ <version>4.0.0+</version>
+ <description>A repository contains the information needed for establishing connections with
+ remote repository.</description>
+ <fields>
+ <field>
+ <name>releases</name>
+ <version>4.0.0+</version>
+ <description>How to handle downloading of releases from this repository.</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshots</name>
+ <version>4.0.0+</version>
+ <description>How to handle downloading of snapshots from this repository.</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <name>RepositoryPolicy</name>
+ <version>4.0.0+</version>
+ <description>Download policy.</description>
+ <fields>
+ <field>
+ <name>enabled</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether to use this repository for downloading this type of artifact. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>true</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>updatePolicy</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The frequency for downloading updates - can be
+ <code>always,</code>
+ <code>daily</code>
+ (default),
+ <code>interval:XXX</code>
+ (in minutes) or
+ <code>never</code>
+ (only if it doesn't exist locally).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>checksumPolicy</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ What to do when verification of an artifact checksum fails. Valid values are
+ <code>ignore</code>
+ ,
+ <code>fail</code>
+ or
+ <code>warn</code>
+ (the default).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+
+ public boolean isEnabled()
+ {
+ return ( enabled != null ) ? Boolean.parseBoolean( enabled ) : true;
+ }
+
+ public void setEnabled( boolean enabled )
+ {
+ this.enabled = String.valueOf( enabled );
+ }
+
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <!-- Profile support -->
+ <class>
+ <name>Profile</name>
+ <superClass>ModelBase</superClass>
+ <version>4.0.0+</version>
+ <description>Modifications to the build process which is activated based on environmental
+ parameters or command line arguments.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The identifier of this build profile. This is used for command line
+ activation, and identifies profiles to be merged.
+ </description>
+ </field>
+ <field><!-- TBD keep in consumer? -->
+ <name>activation</name>
+ <version>4.0.0+</version>
+ <description>The conditional logic which will automatically trigger the inclusion of this
+ profile.</description>
+ <association>
+ <type>Activation</type>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public static final String SOURCE_POM = "pom";
+
+ public static final String SOURCE_SETTINGS = "settings.xml";
+
+ // 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 = SOURCE_POM;
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ }
+
+ public String getSource()
+ {
+ return source;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Profile {id: " + getId() + ", source: " + getSource() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <name>Activation</name>
+ <version>4.0.0+</version>
+ <description>The conditions within the build runtime environment which will trigger the
+ automatic inclusion of the build profile. Multiple conditions can be defined, which must
+ be all satisfied to activate the profile.
+ </description>
+ <fields>
+ <field>
+ <name>activeByDefault</name>
+ <version>4.0.0+</version>
+ <type>boolean</type>
+ <description>If set to true, this profile will be active unless another profile in this
+ pom is activated using the command line -P option or by one of that profile's
+ activators.</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.
+ For example, <code>1.4</code> only activates on JDKs versioned 1.4,
+ while <code>!1.4</code> matches any JDK that is not version 1.4. Ranges are supported too:
+ <code>[1.5,)</code> activates when the JDK is 1.5 minimum.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>os</name>
+ <version>4.0.0+</version>
+ <description>Specifies that this profile will be activated when matching operating system
+ attributes are detected.</description>
+ <association>
+ <type>ActivationOS</type>
+ </association>
+ </field>
+ <field>
+ <name>property</name>
+ <version>4.0.0+</version>
+ <description>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>Specifies that this profile will be activated based on existence of a file.</description>
+ <association>
+ <type>ActivationFile</type>
+ </association>
+ </field>
+ <!--
+ This could be included once we teach Maven to deal with multiple versions of the model
+ <field>
+ <name>custom</name>
+ <version>4.0.0+</version>
+ <description>Describes a custom profile activation trigger, brought in via build
+ extension.</description>
+ <association>
+ <type>ActivationCustom</type>
+ </association>
+ </field>
+ -->
+ </fields>
+ </class>
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <name>ActivationProperty</name>
+ <version>4.0.0+</version>
+ <description>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 required to activate a profile.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <name>ActivationOS</name>
+ <version>4.0.0+</version>
+ <description>This is an activator which will detect an operating system's attributes in order
+ to activate its profile.</description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The name of the operating system to be used to activate the profile. This must be an exact match
+ of the <code>${os.name}</code> Java property, such as <code>Windows XP</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>family</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The general family of the OS to be used to activate the profile, such as
+ <code>windows</code> or <code>unix</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>arch</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The architecture of the operating system to be used to activate the
+ profile.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The version of the operating system to be used to activate the
+ profile.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <name>ActivationFile</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[This is the file specification used to activate the profile. The <code>missing</code> value
+ is the location of a file that needs to exist, and if it doesn't, the profile will be
+ activated. On the other hand, <code>exists</code> will test for the existence of the file and if it is
+ there, the profile will be activated.<br>
+ Variable interpolation for these file specifications is limited to <code>${basedir}</code>,
+ System properties and request properties.]]></description>
+ <fields>
+ <field>
+ <name>missing</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The name of the file that must be missing to activate the
+ profile.</description>
+ </field>
+ <field>
+ <name>exists</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The name of the file that must exist to activate the profile.</description>
+ </field>
+ </fields>
+ </class>
+ <!--
+ This can be put back in when we figure out how to have multiple model versions
+ <class>
+ <name>ActivationCustom</name>
+ <version>4.0.0+</version>
+ <description>This activation allows users to specify their own custom trigger for a profile.</description>
+ <fields>
+ <field>
+ <name>configuration</name>
+ <version>4.0.0+</version>
+ <type>DOM</type>
+ <description>The specification for triggering the profile according to the rules of the
+ custom activation type.</description>
+ </field>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The type (role-hint) of activation which is to be used to activate the
+ profile.</description>
+ </field>
+ </fields>
+ </class>
+ -->
+ <!-- /BuildProfile support -->
+ <class java.clone="deep">
+ <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</defaultValue>
+ <description><![CDATA[
+ For a plugin project (packaging is <code>maven-plugin</code>), the minimum version of
+ Maven required to use the resulting plugin.<br>
+ In Maven 2, this was also specifying the minimum version of Maven required to build a
+ project, but this usage is <b>deprecated</b> in Maven 3 and not checked any more: use
+ the <a href="https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html">Maven Enforcer Plugin's
+ <code>requireMavenVersion</code> rule</a> instead.
+ ]]>
+ </description>
+ <required>false</required>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep"><!-- TBD keep in consumer? -->
+ <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 ID 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 locationTracker="locations" java.clone="shallow">
+ <name>InputLocation</name>
+ <version>4.0.0+</version>
+ <fields>
+ <!-- line, column and source fields are auto-generated by Modello -->
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+
+ @Override
+ public String toString()
+ {
+ return getLineNumber() + " : " + getColumnNumber() + ", " + getSource();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class sourceTracker="source" java.clone="shallow">
+ <name>InputSource</name>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>modelId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The identifier of the POM in the format {@code <groupId>:<artifactId>:<version>}.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>location</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The path/URL of the POM or {@code null} if unknown.
+ ]]>
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ @Override
+ public String toString()
+ {
+ return getModelId() + " " + getLocation();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ </classes>
+</model>
diff --git a/src/main/mdo/maven.mdo b/src/main/mdo/maven.mdo
new file mode 100644
index 0000000..7ba6106
--- /dev/null
+++ b/src/main/mdo/maven.mdo
@@ -0,0 +1,3010 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+
+<!--
+ | Improvements:
+ |
+ | 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. (see MNG-3626)
+ |
+ | 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 groupId/artifactId and sometimes version. It would be good to have them all extend one
+ | definition of these types
+ |
+-->
+<model xmlns="http://codehaus-plexus.github.io/MODELLO/1.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/1.4.0 http://codehaus-plexus.github.io/modello/xsd/modello-1.4.0.xsd"
+ xml.namespace="http://maven.apache.org/POM/${version}"
+ xml.schemaLocation="http://maven.apache.org/xsd/maven-${version}.xsd">
+ <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="https://maven.apache.org/xsd/maven-v3_0_0.xsd">https://maven.apache.org/xsd/maven-v3_0_0.xsd</a> for Maven 1.1.</li>
+ <li><a href="https://maven.apache.org/xsd/maven-4.0.0.xsd">https://maven.apache.org/xsd/maven-4.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" java.clone.hook="cloneHook">
+ <name>Model</name>
+ <superClass>ModelBase</superClass>
+ <description>
+ <![CDATA[
+ The <code><project></code> element is the root of the descriptor.
+ The following table lists all of the possible child elements.
+ ]]>
+ </description>
+ <version>3.0.0+</version>
+ <fields>
+
+ <!-- ====================================================================== -->
+ <!-- Model Version -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>modelVersion</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>Declares to which version of project descriptor this POM conforms.</description>
+ <type>String</type>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Parent Model -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>parent</name>
+ <version>4.0.0+</version>
+ <description>The location of the parent project, if one exists. Values from the parent
+ project will be the default for this project if they are left unspecified. The location
+ is given as a group ID, artifact ID and version.</description>
+ <association>
+ <type>Parent</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- groupId/artifactId/Version/Packaging -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>groupId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ A universally unique identifier for a project. It is normal to
+ use a fully-qualified package name to distinguish it from other
+ projects with a similar name (eg. <code>org.apache.maven</code>).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The identifier for this artifact that is unique within the group given by the
+ group ID. An artifact is something that is either produced or used by a project.
+ Examples of artifacts produced by Maven for a project include: JARs, source and binary
+ distributions, and WARs.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>The current version of the artifact produced by this project.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>packaging</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of artifact this project produces, for example <code>jar</code>
+ <code>war</code>
+ <code>ear</code>
+ <code>pom</code>.
+ Plugins can create their own packaging, and
+ therefore their own packaging types,
+ so this list does not contain all possible types.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Elements which describe a project -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <name>name</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The full name of the project.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>3.0.0+</version>
+ <description>A detailed description of the project, used by Maven whenever it needs to
+ describe the project, such as on the web site. While this element can be specified as
+ CDATA to enable the use of HTML tags within the description, it is discouraged to allow
+ plain text representation. If you need to modify the index page of the generated web
+ site, you are able to specify your own instead of adjusting this text.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL to the project's homepage.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>inceptionYear</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>The year of the project's inception, specified with 4 digits. This value is
+ used when generating copyright notices as well as being informational.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>organization</name>
+ <version>3.0.0+</version>
+ <description>This element describes various attributes of the organization to which the
+ project belongs. These attributes are utilized when documentation is created (for
+ copyright notices and links).</description>
+ <alias>organisation</alias>
+ <association>
+ <type>Organization</type>
+ </association>
+ </field>
+ <field>
+ <name>licenses</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ This element describes all of the licenses for this project.
+ Each license is described by a <code>license</code> element, which
+ is then described by additional elements.
+ Projects should only list the license(s) that applies to the project
+ and not the licenses that apply to dependencies.
+ If multiple licenses are listed, it is assumed that the user can select
+ any of them, not that they must accept all.
+ ]]>
+ </description>
+ <association>
+ <type>License</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>developers</name>
+ <version>3.0.0+</version>
+ <description>Describes the committers of a project.</description>
+ <association>
+ <type>Developer</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>contributors</name>
+ <version>3.0.0+</version>
+ <description>Describes the contributors to a project that are not yet committers.</description>
+ <association>
+ <type>Contributor</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>mailingLists</name>
+ <version>3.0.0+</version>
+ <description>Contains information about a project's mailing lists.</description>
+ <association>
+ <type>MailingList</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Build prerequisites -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank">
+ <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>
+
+ <!-- ====================================================================== -->
+ <!-- SCM -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="modules">
+ <name>scm</name>
+ <version>4.0.0+</version>
+ <description>Specification for the SCM used by the project, such as CVS, Subversion, etc.</description>
+ <association>
+ <type>Scm</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Issue Tracking -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>issueManagement</name>
+ <version>4.0.0+</version>
+ <description>The project's issue management system information.</description>
+ <association>
+ <type>IssueManagement</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- CI Management -->
+ <!-- ====================================================================== -->
+
+ <field>
+ <name>ciManagement</name>
+ <version>4.0.0+</version>
+ <description>The project's continuous integration information.</description>
+ <association>
+ <type>CiManagement</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Build -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="pluginRepositories">
+ <name>build</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>Information required to build the project.</description>
+ <association>
+ <type>Build</type>
+ </association>
+ </field>
+
+ <!-- ====================================================================== -->
+ <!-- Profiles -->
+ <!-- ====================================================================== -->
+
+ <field xdoc.separator="blank" xml.insertParentFieldsUpTo="reporting">
+ <name>profiles</name>
+ <version>4.0.0+</version>
+ <description>A listing of project-local build profiles which will modify the build process
+ when activated.</description>
+ <association>
+ <type>Profile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private void cloneHook( Model copy )
+ {
+ copy.pomFile = pomFile;
+ }
+
+ /**
+ * The POM from which this model originated. This is transient runtime state and therefore not managed by Modello.
+ */
+ private java.io.File pomFile;
+
+ /**
+ * Gets the POM file for the corresponding project (if any).
+ *
+ * @return The POM file from which this model originated or {@code null} if this model does not belong to a local
+ * project (e.g. describes the metadata of some artifact from the repository).
+ */
+ public java.io.File getPomFile()
+ {
+ return pomFile;
+ }
+
+ public void setPomFile( java.io.File pomFile )
+ {
+ this.pomFile = ( pomFile != null ) ? pomFile.getAbsoluteFile() : null;
+ }
+
+ /**
+ * Gets the base directory for the corresponding project (if any).
+ *
+ * @return The base directory for the corresponding project or {@code null} if this model does not belong to a local
+ * project (e.g. describes the metadata of some artifact from the repository).
+ */
+ public java.io.File getProjectDirectory()
+ {
+ return ( pomFile != null ) ? pomFile.getParentFile() : null;
+ }
+
+ /**
+ * @return the model id as <code>groupId:artifactId:packaging:version</code>
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 64 );
+
+ id.append( ( getGroupId() == null ) ? "[inherited]" : getGroupId() );
+ id.append( ":" );
+ id.append( getArtifactId() );
+ id.append( ":" );
+ id.append( getPackaging() );
+ id.append( ":" );
+ id.append( ( getVersion() == null ) ? "[inherited]" : getVersion() );
+
+ return id.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>ModelBase</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Base class for the <code>Model</code> and the <code>Profile</code> objects.
+ ]]>
+ </description>
+ <fields>
+ <field xdoc.separator="blank">
+ <name>modules</name>
+ <version>4.0.0+</version>
+ <description>The modules (sometimes called subprojects) to build as a part of this
+ project. Each module listed is a relative path to the directory containing the module.
+ To be consistent with the way default urls are calculated from parent, it is recommended
+ to have module names match artifact ids.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>distributionManagement</name>
+ <version>4.0.0+</version>
+ <description>Distribution information for a project that enables deployment of the site
+ and artifacts to remote web servers and repositories respectively.</description>
+ <association>
+ <type>DistributionManagement</type>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>properties</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Properties that can be used throughout the POM as a substitution, and
+ are used as filters in resources if enabled.
+ The format is <code><name>value</name></code>.
+ ]]>
+ </description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>dependencyManagement</name>
+ <version>4.0.0+</version>
+ <required>false</required>
+ <description>Default dependency information for projects that inherit from this one. The
+ dependencies in this section are not immediately resolved. Instead, when a POM derived
+ from this one declares a dependency described by a matching groupId and artifactId, the
+ version and other values from this section are used for that dependency if they were not
+ already specified.</description>
+ <association>
+ <type>DependencyManagement</type>
+ </association>
+ </field>
+ <field>
+ <name>dependencies</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ This element describes all of the dependencies associated with a
+ project.
+ These dependencies are used to construct a classpath for your
+ project during the build process. They are automatically downloaded from the
+ repositories defined in this project.
+ See <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+ dependency mechanism</a> for more information.
+ ]]>
+ </description>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>repositories</name>
+ <version>4.0.0+</version>
+ <description>The lists of the remote repositories for discovering dependencies and
+ extensions.</description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>pluginRepositories</name>
+ <version>4.0.0+</version>
+ <description>The lists of the remote repositories for discovering plugins for builds and
+ reports.</description>
+ <association>
+ <type>Repository</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field xdoc.separator="blank">
+ <name>reports</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Now ignored by Maven.
+ ]]>
+ </description>
+ <type>DOM</type>
+ </field>
+ <field>
+ <name>reporting</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ This element includes the specification of report plugins to use
+ to generate the reports on the Maven-generated site.
+ These reports will be run when a user executes <code>mvn site</code>.
+ All of the reports will be included in the navigation bar for browsing.
+ ]]>
+ </description>
+ <association>
+ <type>Reporting</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>PluginContainer</name>
+ <version>3.0.0+</version>
+ <description>Contains the plugins informations for the project.</description>
+ <fields>
+ <field>
+ <name>plugins</name>
+ <version>4.0.0+</version>
+ <description>The list of plugins to use.</description>
+ <association>
+ <type>Plugin</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ java.util.Map<String, Plugin> pluginMap;
+
+ /**
+ * Reset the <code>pluginsMap</code> field to <code>null</code>
+ */
+ public synchronized void flushPluginMap()
+ {
+ this.pluginMap = null;
+ }
+
+ /**
+ * @return a Map of plugins field with <code>Plugins#getKey()</code> as key
+ * @see org.apache.maven.model.Plugin#getKey()
+ */
+ public synchronized java.util.Map<String, Plugin> getPluginsAsMap()
+ {
+ if ( pluginMap == null )
+ {
+ pluginMap = new java.util.LinkedHashMap<String, Plugin>();
+ if ( plugins != null )
+ {
+ for ( java.util.Iterator<Plugin> it = plugins.iterator(); it.hasNext(); )
+ {
+ Plugin plugin = (Plugin) it.next();
+ pluginMap.put( plugin.getKey(), plugin );
+ }
+ }
+ }
+
+ return pluginMap;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>PluginConfiguration</name>
+ <version>3.0.0+</version>
+ <superClass>PluginContainer</superClass>
+ <description>Contains the plugins management informations for the project.</description>
+ <fields>
+ <!-- [ jdcasey:06-Mar-2005 ] Added to handle version management, etc. for
+ | plugins to be used in sub-projects. -->
+ <field>
+ <name>pluginManagement</name>
+ <version>4.0.0+</version>
+ <required>false</required>
+ <description>Default plugin information to be made available for reference by projects
+ derived from this one. This plugin configuration will not be resolved or bound to the
+ lifecycle unless referenced. Any local configuration for a given plugin will override
+ the plugin's entire definition here.</description>
+ <association>
+ <type>PluginManagement</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>BuildBase</name>
+ <version>3.0.0+</version>
+ <superClass>PluginConfiguration</superClass>
+ <description>Generic informations for a build.</description>
+ <fields>
+ <field>
+ <name>defaultGoal</name>
+ <version>3.0.0+</version>
+ <description>The default goal (or phase in Maven 2) to execute when none is specified for
+ the project. Note that in case of a multi-module build, only the default goal of the top-level
+ project is relevant, i.e. the default goals of child modules are ignored. Since Maven 3,
+ multiple goals/phases can be separated by whitespace.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>resources</name>
+ <version>3.0.0+</version>
+ <description><![CDATA[
+ This element describes all of the classpath resources such as properties
+ files associated with a project. These resources are often included in the final
+ package.
+ The default value is <code>src/main/resources</code>.]]>
+ </description>
+ <association>
+ <type>Resource</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>testResources</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[
+ This element describes all of the classpath resources such as properties
+ files associated with a project's unit tests.
+ The default value is <code>src/test/resources</code>.]]>
+ </description>
+ <association>
+ <type>Resource</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>directory</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[
+ The directory where all files generated by the build are placed.
+ The default value is <code>target</code>.]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>finalName</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The filename (excluding the extension, and with no path information) that
+ the produced artifact will be called.
+ The default value is <code>${artifactId}-${version}</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>filters</name>
+ <version>4.0.0+</version>
+ <description>The list of filter properties files that are used when filtering is enabled.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>Build</name>
+ <version>3.0.0+</version>
+ <superClass>BuildBase</superClass>
+ <description>
+ <![CDATA[
+ The <code><build></code> element contains informations required to build the project.
+ Default values are defined in Super POM.
+ ]]>
+ </description>
+ <fields>
+ <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 sources from this directory when the project is
+ built. The path given is relative to the project descriptor.
+ The default value is <code>src/main/java</code>.]]>
+ </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).
+ The default value is <code>src/main/scripts</code>.]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>testSourceDirectory</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description><![CDATA[
+ This element specifies a directory containing the unit test source of the
+ project. The generated build system will compile these directories when the project is
+ being tested. The path given is relative to the project descriptor.
+ The default value is <code>src/test/java</code>.]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>outputDirectory</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[
+ The directory where compiled application classes are placed.
+ The default value is <code>target/classes</code>.]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>testOutputDirectory</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[
+ The directory where compiled test classes are placed.
+ The default value is <code>target/test-classes</code>.]]>
+ </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 java.clone="deep">
+ <name>CiManagement</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><CiManagement></code> element contains informations required to the
+ continuous integration system of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>system</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The name of the continuous integration system, e.g. <code>continuum</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>URL for the continuous integration system used by the project if it has a web
+ interface.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>notifiers</name>
+ <version>4.0.0+</version>
+ <description>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 java.clone="deep">
+ <name>Notifier</name>
+ <description>Configures one method for notifying users/developers when a build breaks.</description>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <defaultValue>mail</defaultValue>
+ <type>String</type>
+ <description>The mechanism used to deliver notifications.</description>
+ </field>
+ <field>
+ <name>sendOnError</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on error.</description>
+ </field>
+ <field>
+ <name>sendOnFailure</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on failure.</description>
+ </field>
+ <field>
+ <name>sendOnSuccess</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on success.</description>
+ </field>
+ <field>
+ <name>sendOnWarning</name>
+ <version>4.0.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ <description>Whether to send notifications on warning.</description>
+ </field>
+ <!-- TODO: Remove it after continuum alpha-3 release -->
+ <field>
+ <name>address</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Where to send the notification to - eg email address.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>configuration</name>
+ <description>Extended configuration specific to this notifier goes here.</description>
+ <type>Properties</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <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>The full name of the contributor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>email</name>
+ <version>3.0.0+</version>
+ <description>The email address of the contributor.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The URL for the homepage of the contributor.</description>
+ <type>String</type>
+ </field>
+ <!-- TODO: should this just be a single Organization element -->
+ <field>
+ <name>organization</name>
+ <alias>organisation</alias>
+ <version>3.0.0+</version>
+ <description>The organization to which the contributor belongs.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>organizationUrl</name>
+ <alias>organisationUrl</alias>
+ <version>3.0.0+</version>
+ <description>The URL of the organization.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>roles</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The roles the contributor plays in the project. Each role is described by a
+ <code>role</code> element, the body of which is a role name. This can also be used to
+ describe the contribution.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>timezone</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The timezone the contributor is in. Typically, this is a number in the range
+ <a href="http://en.wikipedia.org/wiki/UTC%E2%88%9212:00">-12</a> to <a href="http://en.wikipedia.org/wiki/UTC%2B14:00">+14</a>
+ or a valid time zone id like "America/Montreal" (UTC-05:00) or "Europe/Paris" (UTC+01:00).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>properties</name>
+ <version>3.0.0+</version>
+ <description>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 java.clone="deep">
+ <name>Dependency</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><dependency></code> element contains information about a dependency
+ of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The project group that produced the dependency, e.g.
+ <code>org.apache.maven</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>3.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The unique id for an artifact produced by the project group, e.g.
+ <code>maven-artifact</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The version of the dependency, e.g. <code>3.2.1</code>. In Maven 2, this can also be
+ specified as a range of versions.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of dependency. While it
+ usually represents the extension on the filename of the dependency,
+ that is not always the case. A type can be mapped to a different
+ extension and a classifier.
+ The type often corresponds to the packaging used, though this is also
+ not always the case.
+ Some examples are <code>jar</code>, <code>war</code>, <code>ejb-client</code>
+ and <code>test-jar</code>: see <a href="../maven-core/artifact-handlers.html">default
+ artifact handlers</a> for a list.
+ New types can be defined by plugins that set
+ <code>extensions</code> to <code>true</code>, so this is not a complete list.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>jar</defaultValue>
+ </field>
+ <field>
+ <name>classifier</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The classifier of the dependency. It is appended to
+ the filename after the version. This allows:
+ <ul>
+ <li>referring to attached artifact, for example <code>sources</code> and <code>javadoc</code>:
+ see <a href="../maven-core/artifact-handlers.html">default artifact handlers</a> for a list,</li>
+ <li>distinguishing two artifacts
+ that belong to the same POM but were built differently.
+ For example, <code>jdk14</code> and <code>jdk15</code>.</li>
+ </ul>
+ ]]>
+ </description>
+ <type>String</type>
+ <required>false</required>
+ </field>
+ <field>
+ <name>scope</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The scope of the dependency - <code>compile</code>, <code>runtime</code>,
+ <code>test</code>, <code>system</code>, and <code>provided</code>. Used to
+ calculate the various classpaths used for compilation, testing, and so on.
+ It also assists in determining which artifacts to include in a distribution of
+ this project. For more information, see
+ <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+ dependency mechanism</a>. The default scope is <code>compile</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ <!-- This default has to be enforced at the maven-artifact layer, to allow
+ | injection of defaults from <dependencyManagement/>.
+ | TODO: how can we document it?
+ |-->
+ <!-- defaultValue>compile</defaultValue -->
+ </field>
+ <field>
+ <name>systemPath</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ FOR SYSTEM SCOPE ONLY. Note that use of this property is <b>discouraged</b>
+ and may be replaced in later versions. This specifies the path on the filesystem
+ for this dependency.
+ Requires an absolute path for the value, not relative.
+ Use a property that gives the machine specific absolute path,
+ e.g. <code>${java.home}</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>exclusions</name>
+ <version>4.0.0+</version>
+ <description>Lists a set of artifacts that should be excluded from this dependency's
+ artifact list when it comes to calculating transitive dependencies.</description>
+ <association>
+ <type>Exclusion</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>optional</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ 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. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isOptional()
+ {
+ return ( optional != null ) ? Boolean.parseBoolean( optional ) : false;
+ }
+
+ public void setOptional( boolean optional )
+ {
+ this.optional = String.valueOf( optional );
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Dependency {groupId=" + groupId + ", artifactId=" + artifactId + ", version=" + version + ", type=" + type + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private String managementKey;
+
+ /**
+ * @return the management key as <code>groupId:artifactId:type</code>
+ */
+ public String getManagementKey()
+ {
+ if ( managementKey == null )
+ {
+ managementKey = groupId + ":" + artifactId + ":" + type + ( classifier != null ? ":" + classifier : "" );
+ }
+ return managementKey;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <superClass>Contributor</superClass>
+ <name>Developer</name>
+ <description>Information about one of the committers on this project.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>3.0.0+</version>
+ <description>The unique ID of the developer in the SCM.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>Exclusion</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><exclusion></code> element contains informations required to exclude
+ an artifact to the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>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>The group ID of the project to exclude.</description>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>IssueManagement</name>
+ <description>Information about the issue tracking (or bug tracking) system used to manage this
+ project.</description>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>system</name>
+ <version>4.0.0+</version>
+ <description>The name of the issue management system, e.g. Bugzilla</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>URL for the issue management system used by the project.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>DistributionManagement</name>
+ <version>4.0.0+</version>
+ <description>This elements describes all that pertains to distribution for a project. It is
+ primarily used for deployment of artifacts and the site produced by the build.</description>
+ <fields>
+ <field>
+ <name>repository</name>
+ <version>4.0.0+</version>
+ <description>Information needed to deploy the artifacts generated by the project to a
+ remote repository.</description>
+ <association>
+ <type>DeploymentRepository</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshotRepository</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Where to deploy snapshots of artifacts to. If not given, it defaults to the
+ <code>repository</code> element.
+ ]]>
+ </description>
+ <association>
+ <type>DeploymentRepository</type>
+ </association>
+ </field>
+ <field>
+ <name>site</name>
+ <description>Information needed for deploying the web site of the project.</description>
+ <version>4.0.0+</version>
+ <association>
+ <type>Site</type>
+ </association>
+ </field>
+ <field>
+ <name>downloadUrl</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL of the project's download page. If not given users will be
+ referred to the homepage given by <code>url</code>.
+ This is given to assist in locating artifacts that are not in the repository due to
+ licensing restrictions.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>relocation</name>
+ <version>4.0.0+</version>
+ <description>Relocation information of the artifact if it has been moved to a new group ID
+ and/or artifact ID.</description>
+ <association>
+ <type>Relocation</type>
+ </association>
+ </field>
+ <field>
+ <name>status</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Gives the status of this artifact in the remote repository.
+ This must not be set in your local project, as it is updated by
+ tools placing it in the reposiory. Valid values are: <code>none</code> (default),
+ <code>converted</code> (repository manager converted this from an Maven 1 POM),
+ <code>partner</code>
+ (directly synced from a partner Maven 2 repository), <code>deployed</code> (was deployed from a Maven 2
+ instance), <code>verified</code> (has been hand verified as correct and final).
+ ]]>
+ </description>
+ <required>false</required>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>License</name>
+ <description>Describes the licenses for this project. This is used to generate the license
+ page of the project's web site, as well as being taken into consideration in other reporting
+ and validation. The licenses listed for the project are that of the project itself, and not
+ of dependencies.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full legal name of the license.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>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 java.clone="deep">
+ <name>MailingList</name>
+ <version>3.0.0+</version>
+ <description>This element describes all of the mailing lists associated with a project. The
+ auto-generated site references this information.</description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The name of the mailing list.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>subscribe</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The email address or link that can be used to subscribe to
+ the mailing list. If this is an email address, a
+ <code>mailto:</code> link will automatically be created
+ when the documentation is created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>unsubscribe</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The email address or link that can be used to unsubscribe to
+ the mailing list. If this is an email address, a
+ <code>mailto:</code> link will automatically be created
+ when the documentation is created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>post</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ The email address or link that can be used to post to
+ the mailing list. If this is an email address, a
+ <code>mailto:</code> link will automatically be created
+ when the documentation is created.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>archive</name>
+ <version>3.0.0+</version>
+ <description>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>The link to alternate URLs where you can browse the list archive.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <comment>We could probably have a specific element for a dev mailing list for things like CI,
+ and maybe even a specific element for the user and scm mailing lists. Then leave the more
+ lose structure for any other type of mailing list.</comment>
+ </class>
+ <class java.clone="deep">
+ <name>Organization</name>
+ <description>Specifies the organization that produces this project.</description>
+ <version>3.0.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>3.0.0+</version>
+ <description>The full name of the organization.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>3.0.0+</version>
+ <description>The URL to the organization's home page.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>PatternSet</name>
+ <version>3.0.0+</version>
+ <description>Definition of include or exclude patterns.</description>
+ <fields>
+ <field>
+ <name>includes</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ A list of patterns to include, e.g. <code>**/*.xml</code>.
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>excludes</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ A list of patterns to exclude, e.g. <code>**/*.xml</code>
+ ]]>
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder( 128 );
+
+ sb.append("PatternSet [includes: {");
+ for (java.util.Iterator i = getIncludes().iterator(); i.hasNext(); )
+ {
+ String str = (String) i.next();
+ sb.append(str).append(", ");
+ }
+ if (sb.substring(sb.length() - 2).equals(", ")) sb.delete(sb.length() - 2, sb.length());
+
+ sb.append("}, excludes: {");
+ for (java.util.Iterator i = getExcludes().iterator(); i.hasNext(); )
+ {
+ String str = (String) i.next();
+ sb.append(str).append(", ");
+ }
+ if (sb.substring(sb.length() - 2).equals(", ")) sb.delete(sb.length() - 2, sb.length());
+
+ sb.append("}]");
+ return sb.toString();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Parent</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><parent></code> element contains information required to locate the parent project from which
+ this project will inherit from.
+ <strong>Note:</strong> The children of this element are not interpolated and must be given as literal values.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <description>The group id of the parent project to inherit from.</description>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <description>The artifact id of the parent project to inherit from.</description>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version of the parent project to inherit.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>relativePath</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The relative path of the parent <code>pom.xml</code> file within the check out.
+ If not specified, it defaults to <code>../pom.xml</code>.
+ Maven looks for the parent POM first in this location on
+ the filesystem, then the local repository, and lastly in the remote repo.
+ <code>relativePath</code> allows you to select a different location,
+ for example when your structure is flat, or deeper without an intermediate parent POM.
+ However, the group ID, artifact ID and version are still required,
+ and must match the file in the location given or it will revert to the repository for the POM.
+ This feature is only for enhancing the development in a local checkout of that project.
+ Set the value to an empty string in case you want to disable the feature and always resolve
+ the parent POM from the repositories.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>../pom.xml</defaultValue>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @return the id as <code>groupId:artifactId:version</code>
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 64 );
+
+ id.append( getGroupId() );
+ id.append( ":" );
+ id.append( getArtifactId() );
+ id.append( ":" );
+ id.append( "pom" );
+ id.append( ":" );
+ id.append( getVersion() );
+
+ return id.toString();
+ }
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+
+ </class>
+ <class java.clone="deep">
+ <name>Scm</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The <code><scm></code> element contains informations required to the SCM
+ (Source Control Management) of the project.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>connection</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The source control management system URL
+ that describes the repository and how to connect to the
+ repository. For more information, see the
+ <a href="https://maven.apache.org/scm/scm-url-format.html">URL format</a>
+ and <a href="https://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+ This connection is read-only.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>developerConnection</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Just like <code>connection</code>, but for developers, i.e. this scm connection
+ will not be read only.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>tag</name>
+ <version>4.0.0+</version>
+ <description>The tag of current code. By default, it's set to HEAD during development.</description>
+ <type>String</type>
+ <defaultValue>HEAD</defaultValue>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>FileSet</name>
+ <version>3.0.0+</version>
+ <superClass>PatternSet</superClass>
+ <description>A PatternSet for files.</description>
+ <fields>
+ <field>
+ <name>directory</name>
+ <version>3.0.0+</version>
+ <description>Describe the directory where the resources are stored. The path is relative
+ to the POM.</description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "FileSet {directory: " + getDirectory() + ", " + super.toString() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>Resource</name>
+ <description>This element describes all of the classpath resources associated with a project
+ or unit tests.</description>
+ <version>3.0.0+</version>
+ <superClass>FileSet</superClass>
+ <fields>
+ <field>
+ <name>targetPath</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Describe the resource target path. The path is relative to the target/classes
+ directory (i.e. <code>${project.build.outputDirectory}</code>).
+ For example, if you want that resource to appear in a specific package
+ (<code>org.apache.maven.messages</code>), you must specify this
+ element with this value: <code>org/apache/maven/messages</code>.
+ This is not required if you simply put the resources in that directory
+ structure at the source, however.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>filtering</name>
+ <version>3.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether resources are filtered to replace tokens with parameterised values or not.
+ The values are taken from the <code>properties</code> element and from the
+ properties in the files listed in the <code>filters</code> element. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field xml.transient="true">
+ <name>mergeId</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ FOR INTERNAL USE ONLY. This is a unique identifier assigned to each
+ resource to allow Maven to merge changes to this resource that take
+ place during the execution of a plugin. This field must be managed
+ by the generated parser and formatter classes in order to allow it
+ to survive model interpolation.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private static int mergeIdCounter = 0;
+
+ public void initMergeId()
+ {
+ if ( getMergeId() == null )
+ {
+ setMergeId( "resource-" + (mergeIdCounter++) );
+ }
+ }
+
+ public boolean isFiltering()
+ {
+ return ( filtering != null ) ? Boolean.parseBoolean( filtering ) : false;
+ }
+
+ public void setFiltering( boolean filtering )
+ {
+ this.filtering = String.valueOf( filtering );
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Resource {targetPath: " + getTargetPath() + ", filtering: " + isFiltering() + ", " + super.toString() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>RepositoryBase</name>
+ <version>4.0.0+</version>
+ <description>A repository contains the information needed for establishing connections with
+ remote repository.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <identifier>true</identifier>
+ <description>
+ <![CDATA[
+ A unique identifier for a repository. This is used to match the repository
+ to configuration in the <code>settings.xml</code> file, for example. Furthermore, the identifier is
+ used during POM inheritance and profile injection to detect repositories that should be merged.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <description>Human readable name of the repository.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>
+ <![CDATA[
+ The url of the repository, in the form <code>protocol://hostname/path</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>layout</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The type of layout this repository uses for locating and storing artifacts -
+ can be <code>legacy</code> or <code>default</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Repository</name>
+ <superClass>RepositoryBase</superClass>
+ <version>4.0.0+</version>
+ <description>A repository contains the information needed for establishing connections with
+ remote repository.</description>
+ <fields>
+ <field>
+ <name>releases</name>
+ <version>4.0.0+</version>
+ <description>How to handle downloading of releases from this repository.</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ <field>
+ <name>snapshots</name>
+ <version>4.0.0+</version>
+ <description>How to handle downloading of snapshots from this repository.</description>
+ <association>
+ <type>RepositoryPolicy</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>DeploymentRepository</name>
+ <superClass>Repository</superClass>
+ <version>4.0.0+</version>
+ <description>Repository contains the information needed for deploying to the remote
+ repository.</description>
+ <fields>
+ <field>
+ <name>uniqueVersion</name>
+ <description>Whether to assign snapshots a unique version comprised of the timestamp and
+ build number, or to use the same version each time</description>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ <version>4.0.0+</version>
+ </field>
+ </fields>
+ </class>
+
+ <class java.clone="deep">
+ <name>RepositoryPolicy</name>
+ <version>4.0.0+</version>
+ <description>Download policy.</description>
+ <fields>
+ <field>
+ <name>enabled</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether to use this repository for downloading this type of artifact. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>true</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>updatePolicy</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ The frequency for downloading updates - can be
+ <code>always,</code>
+ <code>daily</code>
+ (default),
+ <code>interval:XXX</code>
+ (in minutes) or
+ <code>never</code>
+ (only if it doesn't exist locally).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>checksumPolicy</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ What to do when verification of an artifact checksum fails. Valid values are
+ <code>ignore</code>
+ ,
+ <code>fail</code>
+ or
+ <code>warn</code>
+ (the default).
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+
+ public boolean isEnabled()
+ {
+ return ( enabled != null ) ? Boolean.parseBoolean( enabled ) : true;
+ }
+
+ public void setEnabled( boolean enabled )
+ {
+ this.enabled = String.valueOf( enabled );
+ }
+
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <!--@todo find better solution for management of site deployments -->
+ <class java.clone="deep">
+ <name>Site</name>
+ <version>4.0.0+</version>
+ <description>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 location. This is used to match the
+ site to configuration in the <code>settings.xml</code> file, for example.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <description>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, in the form <code>protocol://hostname/path</code>.
+ <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+
+ <class java.clone="deep">
+ <name>ConfigurationContainer</name>
+ <version>4.0.0+</version>
+ <description>Contains the configuration information of the container like Plugin.</description>
+ <fields>
+ <field>
+ <name>inherited</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Whether any configuration should be propagated to child POMs. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>true</code>.
+ ]]>
+ </description>
+ <type>String</type>
+ </field>
+ <field>
+ <description>
+ <![CDATA[
+ <p>The configuration as DOM object.</p>
+ <p>By default, every element content is trimmed, but starting with Maven 3.1.0, you can add
+ <code>xml:space="preserve"</code> to elements you want to preserve whitespace.</p>
+ <p>You can control how child POMs inherit configuration from parent POMs by adding <code>combine.children</code>
+ or <code>combine.self</code> attributes to the children of the configuration element:</p>
+ <ul>
+ <li><code>combine.children</code>: available values are <code>merge</code> (default) and <code>append</code>,</li>
+ <li><code>combine.self</code>: available values are <code>merge</code> (default) and <code>override</code>.</li>
+ </ul>
+ <p>See <a href="https://maven.apache.org/pom.html#Plugins">POM Reference documentation</a> and
+ <a href="https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomUtils.html">Xpp3DomUtils</a>
+ for more information.</p>
+ ]]>
+ </description>
+ <name>configuration</name>
+ <type>DOM</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isInherited()
+ {
+ return ( inherited != null ) ? Boolean.parseBoolean( inherited ) : true;
+ }
+
+ public void setInherited( boolean inherited )
+ {
+ this.inherited = String.valueOf( inherited );
+ }
+
+ 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>
+ <description>
+ <![CDATA[
+ The <code><plugin></code> element contains informations required for a plugin.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <description>The group ID of the plugin in the repository.</description>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>org.apache.maven.plugins</defaultValue>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <description>The artifact ID of the plugin in the repository.</description>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version (or valid range of versions) of the plugin to be used.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>extensions</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Whether to load Maven extensions (such as packaging and type handlers) from
+ this plugin. For performance reasons, this should only be enabled when necessary. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>executions</name>
+ <version>4.0.0+</version>
+ <description>Multiple specifications of a set of goals to execute during the build
+ lifecycle, each having (possibly) a different configuration.</description>
+ <association>
+ <type>PluginExecution</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>dependencies</name>
+ <description>Additional dependencies that this project needs to introduce to the plugin's
+ classloader.</description>
+ <version>4.0.0+</version>
+ <association>
+ <type>Dependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>goals</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ <b>Deprecated</b>. Unused by Maven.
+ ]]>
+ </description>
+ <type>DOM</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public boolean isExtensions()
+ {
+ return ( extensions != null ) ? Boolean.parseBoolean( extensions ) : false;
+ }
+
+ public void setExtensions( boolean extensions )
+ {
+ this.extensions = String.valueOf( extensions );
+ }
+
+ private java.util.Map<String, PluginExecution> executionMap = null;
+
+ /**
+ * Reset the <code>executionMap</code> field to <code>null</code>
+ */
+ public void flushExecutionMap()
+ {
+ this.executionMap = null;
+ }
+
+ /**
+ * @return a Map of executions field with <code>PluginExecution#getId()</code> as key
+ * @see org.apache.maven.model.PluginExecution#getId()
+ */
+ public java.util.Map<String, PluginExecution> getExecutionsAsMap()
+ {
+ if ( executionMap == null )
+ {
+ executionMap = new java.util.LinkedHashMap<String, PluginExecution>();
+ if ( getExecutions() != null )
+ {
+ for ( java.util.Iterator<PluginExecution> 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;
+ }
+
+ /**
+ * Gets the identifier of the plugin.
+ *
+ * @return The plugin id in the form {@code <groupId>:<artifactId>:<version>}, never {@code null}.
+ */
+ public String getId()
+ {
+ StringBuilder id = new StringBuilder( 128 );
+
+ id.append( ( getGroupId() == null ) ? "[unknown-group-id]" : getGroupId() );
+ id.append( ":" );
+ id.append( ( getArtifactId() == null ) ? "[unknown-artifact-id]" : getArtifactId() );
+ id.append( ":" );
+ id.append( ( getVersion() == null ) ? "[unknown-version]" : getVersion() );
+
+ return id.toString();
+ }
+
+ //TODO we shall reset key variable when groupId/artifactId change
+ private String key = null;
+ /**
+ * @return the key of the plugin, ie <code>groupId:artifactId</code>
+ */
+ public String getKey()
+ {
+ if ( key == null )
+ {
+ key = constructKey( groupId, artifactId );
+ }
+ return key;
+ }
+
+ /**
+ * @param groupId
+ * @param artifactId
+ * @return the key of the plugin, ie <code>groupId:artifactId</code>
+ */
+ public static String constructKey( String groupId, String artifactId )
+ {
+ return groupId + ":" + artifactId;
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object other )
+ {
+ if ( other instanceof Plugin )
+ {
+ Plugin otherPlugin = (Plugin) other;
+
+ return getKey().equals( otherPlugin.getKey() );
+ }
+
+ return false;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ return getKey().hashCode();
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Plugin [" + getKey() + "]";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>PluginExecution</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <description>
+ <![CDATA[
+ The <code><execution></code> element contains informations required for the
+ execution of a plugin.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The identifier of this execution for labelling the goals during the build,
+ and for matching executions to merge during inheritance and profile injection.</description>
+ </field>
+ <field>
+ <name>phase</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The build lifecycle phase to bind the goals in this execution to. If omitted,
+ the goals will be bound to the default phase specified by the plugin. </description>
+ </field>
+ <field xml.transient="true">
+ <name>priority</name>
+ <version>4.0.0+</version>
+ <type>int</type>
+ <description>
+ <![CDATA[
+ The priority of this execution compared to other executions which are bound to the same phase.
+ <strong>Warning:</strong> This is an internal utility property that is only public for technical reasons,
+ it is not part of the public API. In particular, this property can be changed or deleted without prior
+ notice.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>goals</name>
+ <version>4.0.0+</version>
+ <description>The goals to execute with the given configuration.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public static final String DEFAULT_EXECUTION_ID = "default";
+
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <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 used 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 java.clone="deep">
+ <name>Reporting</name>
+ <version>4.0.0+</version>
+ <description>Section for management of reports and their configuration.</description>
+ <fields>
+ <field>
+ <name>excludeDefaults</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ If true, then the default reports are not included in the site generation.
+ This includes the reports in the "Project Info" menu. Note: While the type
+ of this field is <code>String</code> for technical reasons, the semantic type is actually
+ <code>Boolean</code>. Default value is <code>false</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>outputDirectory</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ Where to store all of the generated reports. The default is
+ <code>${project.build.directory}/site</code>.
+ ]]>
+ </description>
+ <!-- TODO: why isn't default set here? -->
+ </field>
+ <field>
+ <name>plugins</name>
+ <version>4.0.0+</version>
+ <description>The reporting 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[
+ public boolean isExcludeDefaults()
+ {
+ return ( excludeDefaults != null ) ? Boolean.parseBoolean( excludeDefaults ) : false;
+ }
+
+ public void setExcludeDefaults( boolean excludeDefaults )
+ {
+ this.excludeDefaults = String.valueOf( excludeDefaults );
+ }
+
+ java.util.Map<String, ReportPlugin> reportPluginMap;
+
+ /**
+ * Reset the <code>reportPluginMap</code> field to <code>null</code>
+ */
+ public synchronized void flushReportPluginMap()
+ {
+ this.reportPluginMap = null;
+ }
+
+ /**
+ * @return a Map of plugins field with <code>ReportPlugin#getKey()</code> as key
+ * @see org.apache.maven.model.ReportPlugin#getKey()
+ */
+ public synchronized java.util.Map<String, ReportPlugin> getReportPluginsAsMap()
+ {
+ if ( reportPluginMap == null )
+ {
+ reportPluginMap = new java.util.LinkedHashMap<String, ReportPlugin>();
+ if ( getPlugins() != null )
+ {
+ for ( java.util.Iterator<ReportPlugin> 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>Modifications to the build process which is activated based on environmental
+ parameters or command line arguments.</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <defaultValue>default</defaultValue>
+ <description>The identifier of this build profile. This is used for command line
+ activation, and identifies profiles to be merged.
+ </description>
+ </field>
+ <field>
+ <name>activation</name>
+ <version>4.0.0+</version>
+ <description>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>Information required to build the project.</description>
+ <association>
+ <type>BuildBase</type>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ public static final String SOURCE_POM = "pom";
+
+ public static final String SOURCE_SETTINGS = "settings.xml";
+
+ // 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 = SOURCE_POM;
+
+ public void setSource( String source )
+ {
+ this.source = source;
+ }
+
+ public String getSource()
+ {
+ return source;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return "Profile {id: " + getId() + ", source: " + getSource() + "}";
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>Activation</name>
+ <version>4.0.0+</version>
+ <description>The conditions within the build runtime environment which will trigger the
+ automatic inclusion of the build profile. Multiple conditions can be defined, which must
+ be all satisfied to activate the profile.
+ </description>
+ <fields>
+ <field>
+ <name>activeByDefault</name>
+ <version>4.0.0+</version>
+ <type>boolean</type>
+ <description>If set to true, this profile will be active unless another profile in this
+ pom is activated using the command line -P option or by one of that profile's
+ activators.</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.
+ For example, <code>1.4</code> only activates on JDKs versioned 1.4,
+ while <code>!1.4</code> matches any JDK that is not version 1.4. Ranges are supported too:
+ <code>[1.5,)</code> activates when the JDK is 1.5 minimum.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>os</name>
+ <version>4.0.0+</version>
+ <description>Specifies that this profile will be activated when matching operating system
+ attributes are detected.</description>
+ <association>
+ <type>ActivationOS</type>
+ </association>
+ </field>
+ <field>
+ <name>property</name>
+ <version>4.0.0+</version>
+ <description>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>Specifies that this profile will be activated based on existence of a file.</description>
+ <association>
+ <type>ActivationFile</type>
+ </association>
+ </field>
+ <!--
+ This could be included once we teach Maven to deal with multiple versions of the model
+ <field>
+ <name>custom</name>
+ <version>4.0.0+</version>
+ <description>Describes a custom profile activation trigger, brought in via build
+ extension.</description>
+ <association>
+ <type>ActivationCustom</type>
+ </association>
+ </field>
+ -->
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationProperty</name>
+ <version>4.0.0+</version>
+ <description>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 required to activate a profile.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationOS</name>
+ <version>4.0.0+</version>
+ <description>This is an activator which will detect an operating system's attributes in order
+ to activate its profile.</description>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The name of the operating system to be used to activate the profile. This must be an exact match
+ of the <code>${os.name}</code> Java property, such as <code>Windows XP</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>family</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The general family of the OS to be used to activate the profile, such as
+ <code>windows</code> or <code>unix</code>.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>arch</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The architecture of the operating system to be used to activate the
+ profile.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The version of the operating system to be used to activate the
+ profile.</description>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <name>ActivationFile</name>
+ <version>4.0.0+</version>
+ <description><![CDATA[This is the file specification used to activate the profile. The <code>missing</code> value
+ is the location of a file that needs to exist, and if it doesn't, the profile will be
+ activated. On the other hand, <code>exists</code> will test for the existence of the file and if it is
+ there, the profile will be activated.<br>
+ Variable interpolation for these file specifications is limited to <code>${basedir}</code>,
+ System properties and request properties.]]></description>
+ <fields>
+ <field>
+ <name>missing</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The name of the file that must be missing to activate the
+ profile.</description>
+ </field>
+ <field>
+ <name>exists</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The name of the file that must exist to activate the profile.</description>
+ </field>
+ </fields>
+ </class>
+ <!--
+ This can be put back in when we figure out how to have multiple model versions
+ <class>
+ <name>ActivationCustom</name>
+ <version>4.0.0+</version>
+ <description>This activation allows users to specify their own custom trigger for a profile.</description>
+ <fields>
+ <field>
+ <name>configuration</name>
+ <version>4.0.0+</version>
+ <type>DOM</type>
+ <description>The specification for triggering the profile according to the rules of the
+ custom activation type.</description>
+ </field>
+ <field>
+ <name>type</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>The type (role-hint) of activation which is to be used to activate the
+ profile.</description>
+ </field>
+ </fields>
+ </class>
+ -->
+ <!-- /BuildProfile support -->
+ <class xml.tagName="plugin" java.clone="deep">
+ <name>ReportPlugin</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <description>
+ <![CDATA[
+ The <code><plugin></code> element contains informations required for a report plugin.
+ ]]>
+ </description>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ <defaultValue>org.apache.maven.plugins</defaultValue>
+ <description>The group ID of the reporting plugin in the repository.</description>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <required>true</required>
+ <description>The artifact ID of the reporting plugin in the repository.</description>
+ </field>
+ <field>
+ <name>version</name>
+ <version>4.0.0+</version>
+ <description>The version of the reporting plugin to be used.</description>
+ <type>String</type>
+ </field>
+ <field>
+ <name>reportSets</name>
+ <version>4.0.0+</version>
+ <description>
+ <![CDATA[
+ Multiple specifications of a set of reports, each having (possibly) different
+ configuration. This is the reporting parallel to an <code>execution</code> in the build.
+ ]]>
+ </description>
+ <association>
+ <type>ReportSet</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ private java.util.Map<String, ReportSet> reportSetMap = null;
+
+ /**
+ * Reset the <code>reportSetMap</code> field to <code>null</code>
+ */
+ public void flushReportSetMap()
+ {
+ this.reportSetMap = null;
+ }
+
+ /**
+ * @return a Map of reportSets field with <code>ReportSet#getId()</code> as key
+ * @see org.apache.maven.model.ReportSet#getId()
+ */
+ public java.util.Map<String, ReportSet> getReportSetsAsMap()
+ {
+ if ( reportSetMap == null )
+ {
+ reportSetMap = new java.util.LinkedHashMap<String, ReportSet>();
+ if ( getReportSets() != null )
+ {
+ for ( java.util.Iterator<ReportSet> i = getReportSets().iterator(); i.hasNext(); )
+ {
+ ReportSet reportSet = (ReportSet) i.next();
+ reportSetMap.put( reportSet.getId(), reportSet );
+ }
+ }
+ }
+
+ return reportSetMap;
+ }
+
+ /**
+ * @return the key of the report plugin, ie <code>groupId:artifactId</code>
+ */
+ public String getKey()
+ {
+ return constructKey( groupId, artifactId );
+ }
+
+ /**
+ * @param groupId
+ * @param artifactId
+ * @return the key of the report plugin, ie <code>groupId:artifactId</code>
+ */
+ public static String constructKey( String groupId, String artifactId )
+ {
+ return groupId + ":" + artifactId;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <name>ReportSet</name>
+ <version>4.0.0+</version>
+ <superClass>ConfigurationContainer</superClass>
+ <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 and profile injection
+ for merging of report sets.
+ </description>
+ <defaultValue>default</defaultValue>
+ </field>
+ <field>
+ <name>reports</name>
+ <version>4.0.0+</version>
+ <required>true</required>
+ <description>The list of reports from this plugin which should be generated from this set.</description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ @Override
+ public String toString()
+ {
+ return getId();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class java.clone="deep">
+ <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</defaultValue>
+ <description><![CDATA[
+ For a plugin project (packaging is <code>maven-plugin</code>), the minimum version of
+ Maven required to use the resulting plugin.<br>
+ In Maven 2, this was also specifying the minimum version of Maven required to build a
+ project, but this usage is <b>deprecated</b> in Maven 3 and not checked any more: use
+ the <a href="https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html">Maven Enforcer Plugin's
+ <code>requireMavenVersion</code> rule</a> instead.
+ ]]>
+ </description>
+ <required>false</required>
+ </field>
+ </fields>
+ </class>
+ <class java.clone="deep">
+ <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 ID 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 java.clone="deep">
+ <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 ID 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[
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object o )
+ {
+ if ( this == o )
+ {
+ return true;
+ }
+
+ if ( !( o instanceof Extension ) )
+ {
+ return false;
+ }
+
+ Extension e = (Extension) o;
+
+ if ( !equal( e.getArtifactId(), getArtifactId() ) )
+ {
+ return false;
+ }
+ else if ( !equal( e.getGroupId(), getGroupId() ) )
+ {
+ return false;
+ }
+ else if ( !equal( e.getVersion(), getVersion() ) )
+ {
+ return false;
+ }
+ return true;
+ }
+
+ private static <T> boolean equal( T obj1, T obj2 )
+ {
+ return ( obj1 != null ) ? obj1.equals( obj2 ) : obj2 == null;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ int result = 17;
+ result = 37 * result + ( getArtifactId() != null ? getArtifactId().hashCode() : 0 );
+ result = 37 * result + ( getGroupId() != null ? getGroupId().hashCode() : 0 );
+ result = 37 * result + ( getVersion() != null ? getVersion().hashCode() : 0 );
+ return result;
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class locationTracker="locations" java.clone="shallow">
+ <name>InputLocation</name>
+ <version>4.0.0+</version>
+ <fields>
+ <!-- line, column and source fields are auto-generated by Modello -->
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+
+ @Override
+ public String toString()
+ {
+ return getLineNumber() + " : " + getColumnNumber() + ", " + getSource();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class sourceTracker="source" java.clone="shallow">
+ <name>InputSource</name>
+ <version>4.0.0+</version>
+ <fields>
+ <field>
+ <name>modelId</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The identifier of the POM in the format {@code <groupId>:<artifactId>:<version>}.
+ ]]>
+ </description>
+ </field>
+ <field>
+ <name>location</name>
+ <version>4.0.0+</version>
+ <type>String</type>
+ <description>
+ <![CDATA[
+ The path/URL of the POM or {@code null} if unknown.
+ ]]>
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>4.0.0+</version>
+ <code>
+ <![CDATA[
+ @Override
+ public String toString()
+ {
+ return getModelId() + " " + getLocation();
+ }
+ ]]>
+ </code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ </classes>
+</model>
diff --git a/src/site/apt/index.apt b/src/site/apt/index.apt
new file mode 100644
index 0000000..b76417b
--- /dev/null
+++ b/src/site/apt/index.apt
@@ -0,0 +1,38 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements. See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership. The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License. You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied. See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.
+
+ -----
+ Introduction
+ -----
+ Jason van Zyl
+ Vincent Siveton
+ Hervé Boutemy
+ -----
+ 2011-06-12
+ -----
+
+Maven Build vs Consumer POM Study
+
+ For more details on the intent, see {{{https://cwiki.apache.org/confluence/display/MAVEN/Build+vs+Consumer+POM} Build vs Consumer POM}}
+ proposal in the {{{https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=5964567} Maven Backlog Wiki}}.
+
+* Build POM Model vs Consumer POM Model
+
+ * usual {{{./maven.html}<<Build POM Descriptor>> Reference}}
+
+ * new {{{./maven-consumer.html}<<Consumer POM Descriptor>> Reference}}
+
\ No newline at end of file
diff --git a/src/site/site.xml b/src/site/site.xml
new file mode 100644
index 0000000..c12e5ec
--- /dev/null
+++ b/src/site/site.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd"
+ name="Maven Consumer Pom Study">
+
+ <bannerLeft>
+ <name>${project.name}</name>
+ <src>https://maven.apache.org/images/apache-maven-project.png</src>
+ <href>https://maven.apache.org/</href>
+ </bannerLeft>
+ <bannerRight>
+ <src>https://maven.apache.org/images/maventxt_logo_200.gif</src>
+ </bannerRight>
+
+ <skin>
+ <groupId>org.apache.maven.skins</groupId>
+ <artifactId>maven-fluido-skin</artifactId>
+ <version>1.7</version>
+ </skin>
+
+ <edit>${project.scm.url}</edit>
+
+ <body>
+ <breadcrumbs>
+ <item name="Studies" href="../" />
+ <item name="Maven Consumer POM" href="./" />
+ </breadcrumbs>
+
+ <menu name="Overview">
+ <item name="Introduction" href="index.html"/>
+ </menu>
+
+ <menu name="Descriptors Reference">
+ <item name="Build POM" href="./maven.html"/>
+ <item name="Consumer POM" href="./maven-consumer.html"/>
+ </menu>
+
+ <menu ref="reports"/>
+ </body>
+</project>
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
hboutemy@apache.org.