 -----
 Maven Project Parent POM
 -----
 Benson Margulies
 Hervé Boutemy
 Karl Heinz Marbaise
 -----
 2015-09-20
 -----

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

~~ NOTE: For help with the syntax of this file, see:
~~ https://maven.apache.org/doxia/references/apt-format.html

Maven Project Parent POM

    This POM is the common parent of all of the Maven components
    in the Apache Maven project. Most of its contents are
    pinning down version numbers of plugins. It does 
    provide {{{./dependency-management.html}minimal dependencyManagement}} for
    plexus-component and plugin-tools annotations.

    This POM contains Maven developers information for the {{{./team-list.html}Project Team report}},
    sorted by role and id.
    See the LDAP extract for more accurate {{{https://people.apache.org/committers-by-project.html#maven}committers}}
    and {{{https://people.apache.org/committers-by-project.html#maven-pmc}PMC members}} lists. 

The <<<reporting>>> Profile

    This POM provides <<<reporting>>> profile for rendering documentation during site generation:

+-----+
mvn -Preporting site
+-----+

    See {{{./plugins.html}Plugins report}} for a list of configured report plugins.

The <<<jdk-toolchain>>> Profile

    This POM provides <<<jdk-toolchain>>> profile to activate JDK selection as a toolchain with version
    requirement configured as minimum java version for the project.

Site Publication

    This POM prepares site publication to {{{/developers/website/index.html}Apache Maven's site svnpubsub}}.
    Every inheriting POM needs to define <<<maven.site.path>>> property
    with relative path to <<<$\{project.artifactId}-LATEST>>> publication uri, and define <<<distributionManagement>>> to avoid
    automatic inheritance from parent:

+-----+
  <properties>
    <maven.site.path>xxx-archives/\${project.artifactId}-LATEST</maven.site.path>
  </properties>
  <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>
+-----+

    Once this is configured, the site is published with:

+-----+
mvn -Preporting site site:stage
mvn scm-publish:publish-scm
+-----+

    See {{{/developers/website/deploy-component-reference-documentation.html}deploying Maven components reference documentation}}
    for more information.

* Mono Module: <<<site.scm-deploy>>> profile

    If the build is mono module, previous 2-steps publication can be simplified by activating <<<site.scm-deploy>>> profile
    through <<<maven.site.scm-deploy>>> property

+-----+
  <properties>
    <maven.site.scm-deploy>true</maven.site.scm-deploy>
  </properties>
+-----+

    Once this is configured, the site can be published in only one command:

+-----+
mvn -Preporting site-deploy
+-----+

History

#if( $project.version.endsWith( "SNAPSHOT" ) )
    trunk: {{{https://svn.apache.org/viewvc/maven/pom/trunk/maven/pom.xml?view=markup}$project.version}} ({{{https://svn.apache.org/viewvc/maven/pom/trunk/maven/pom.xml?r1=HEAD&r2=1704199&diff_format=h}diff}})
#end

    As of version 27, this POM sets the Java source and target versions to 1.6. Thus, as any plugin (or other component)
    moved to version 27+ of this POM, it moves to requiring Java 1.6 (was Java 1.5 since version 21).

*--------------+------------+
|| <<Version>> || <<Release Date>> ||
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-30/pom.xml?view=markup}30}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-30/pom.xml?r1=HEAD&r2=1704199&diff_format=h}diff}}) | 2016-05-26 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-27/pom.xml?view=markup}27}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-27/pom.xml?r1=HEAD&r2=1639456&diff_format=h}diff}}) | 2015-09-23 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-26/pom.xml?view=markup}26}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-26/pom.xml?r1=HEAD&r2=1632922&diff_format=h}diff}}) | 2014-11-13 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-25/pom.xml?view=markup}25}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-25/pom.xml?r1=HEAD&r2=1582495&diff_format=h}diff}}) | 2014-10-22 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-24/pom.xml?view=markup}24}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-24/pom.xml?r1=HEAD&r2=1465498&diff_format=h}diff}}) | 2014-03-27 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-23/pom.xml?view=markup}23}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-23/pom.xml?r1=HEAD&r2=1371599&diff_format=h}diff}}) | 2013-01-21 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-22/pom.xml?view=markup}22}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-22/pom.xml?r1=HEAD&r2=1157980&diff_format=h}diff}}) | 2012-08-08 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-21/pom.xml?view=markup}21}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-21/pom.xml?r1=HEAD&r2=1134934&diff_format=h}diff}}) | 2011-08-18 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-20/pom.xml?view=markup}20}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-20/pom.xml?r1=HEAD&r2=1069626&diff_format=h}diff}}) | 2011-06-15 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-19/pom.xml?view=markup}19}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-19/pom.xml?r1=HEAD&r2=1038256&diff_format=h}diff}}) | 2011-02-15 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-18/pom.xml?view=markup}18}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-18/pom.xml?r1=HEAD&r2=1029850&diff_format=h}diff}}) | 2010-11-26 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-17/pom.xml?view=markup}17}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-17/pom.xml?r1=HEAD&r2=905048&diff_format=h}diff}}) | 2010-11-04 |
*--------------+------------+
