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

History

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

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

*--------------+------------+
|| <<Version>> || <<Release Date>> ||
*--------------+------------+
| {{{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 |
*--------------+------------+
