 -----
 Introduction
 -----
 Hervé Boutemy
 Karl Heinz Marbaise
 -----
 2014-11-13
 -----

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

${project.name}

    This POM is the common parent of all of the {{{/plugins/}Maven plugins}}
    in the Apache Maven project.

* The <<<run-its>>> Profile

    This POM provides <<<run-its>>> profile for running Integration Tests to check real plugin execution.
    A default configuration for <<<maven-invoker-plugin>>> is defined, that every plugin needs to enhance
    to match its prerequisite. Then ITs are launched in every plugin with following command:

+---+
mvn -Prun-its verify
+---+


* Site Publication

    Since Maven plugins are always mono-module builds, this parent POM has configured <<<maven-scm-publish-plugin>>>
    {{{/plugins/maven-scm-publish-plugin/examples/one-module-configuration.html}mono module optimization}}
    to ease site build & deployment in only one integrated and simplified command:

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

* History

#if( $project.version.endsWith( "SNAPSHOT" ) )
#**##set( $prev = 33 )
  master: {{{https://github.com/apache/maven-parent/tree/master/maven-plugins/pom.xml}$project.version}}
  ({{{https://github.com/apache/maven-parent/compare/maven-parent-$prev...master#diff}diff}})
#end
#macro ( display $version $date )
#**##set( $prev = $version - 1 )
|  {{{https://github.com/apache/maven-parent/tree/maven-parent-$version/maven-plugins/pom.xml}$version}}
| ({{{https://github.com/apache/maven-parent/compare/maven-parent-$prev...maven-parent-$version#diff}diff}}) | $date |
#end

    As of version 30, this POM sets the Java source and target versions to 1.6. Thus any plugin
    moved to version 30+ of this POM moves to requiring Java 1.6 (was Java 1.5 since version 22).

*--------------+------------+
|| <<Version>> || <<Release Date>> ||
*--------------+------------+
#display( 33, '2018-09-11' )
*--------------+------------+
#display( 32, '2018-07-18' )
*--------------+------------+
#display( 31, '2018-02-05' )
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-30/maven-plugins/pom.xml?view=markup}30}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-30/maven-plugins/pom.xml?r1=HEAD&r2=1639498&diff_format=h}diff}}) | 2016-05-26  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-28/pom.xml?view=markup}28}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-28/pom.xml?r1=HEAD&r2=1716984&diff_format=h}diff}}) | 2015-10-13  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-27/pom.xml?view=markup}27}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-27/pom.xml?r1=HEAD&r2=1632929&diff_format=h}diff}}) | 2014-11-13  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-26/pom.xml?view=markup}26}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-26/pom.xml?r1=HEAD&r2=1582504&diff_format=h}diff}}) | 2014-10-22  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-25/pom.xml?view=markup}25}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-25/pom.xml?r1=HEAD&r2=1440196&diff_format=h}diff}}) | 2014-03-27  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-24/pom.xml?view=markup}24}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-24/pom.xml?r1=HEAD&r2=1371605&diff_format=h}diff}}) | 2013-02-02  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-23/pom.xml?view=markup}23}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-23/pom.xml?r1=HEAD&r2=1157988&diff_format=h}diff}}) | 2012-08-10  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-22/pom.xml?view=markup}22}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-22/pom.xml?r1=HEAD&r2=1135903&diff_format=h}diff}}) | 2011-08-18 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-21/pom.xml?view=markup}21}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-21/pom.xml?r1=HEAD&r2=1103416&diff_format=h}diff}}) | 2011-06-18 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-20/pom.xml?view=markup}20}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-20/pom.xml?r1=HEAD&r2=1069632&diff_format=h}diff}}) | 2011-05-18 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-19/pom.xml?view=markup}19}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-19/pom.xml?r1=HEAD&r2=940021&diff_format=h}diff}}) | 2011-02-15 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-18/pom.xml?view=markup}18}} ({{{https://svn.apache.org/viewvc/maven/plugins/tags/maven-plugins-18/pom.xml?r1=HEAD&r2=905056&diff_format=h}diff}}) | 2010-05-04 |
*--------------+------------+
