 -----
 Introduction
 -----
 Hervé Boutemy
 -----
 2015-10-31
 -----

~~ 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 {{{/shared/}Maven Shared Components}}
    in the Apache Maven project.

* Site Publication

    Since Shared Components 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-shared-components/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-shared-components/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 component
    moved to version 30+ of this POM moves to requiring Java 1.6 (was Java 1.5 since version 17).

*--------------+------------+
|| <<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-shared-components/pom.xml?view=markup}30}} ({{{https://svn.apache.org/viewvc/maven/pom/tags/maven-parent-30/maven-shared-components/pom.xml?r1=HEAD&r2=1711683&diff_format=h}diff}}) | 2016-05-26  |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-22/pom.xml?view=markup}22}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-22/pom.xml?r1=HEAD&r2=1632934&diff_format=h}diff}}) | 2015-10-31 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-21/pom.xml?view=markup}21}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-21/pom.xml?r1=HEAD&r2=1582509&diff_format=h}diff}}) | 2014-10-22 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-20/pom.xml?view=markup}20}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-20/pom.xml?r1=HEAD&r2=1440205&diff_format=h}diff}}) | 2014-03-27 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-19/pom.xml?view=markup}19}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-19/pom.xml?r1=HEAD&r2=1371614&diff_format=h}diff}}) | 2013-02-02 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-18/pom.xml?view=markup}18}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-18/pom.xml?r1=HEAD&r2=1158001&diff_format=h}diff}}) | 2012-08-08 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-17/pom.xml?view=markup}17}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-17/pom.xml?r1=HEAD&r2=1069636&diff_format=h}diff}}) | 2011-08-18 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-16/pom.xml?view=markup}16}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-16/pom.xml?r1=HEAD&r2=905061&diff_format=h}diff}}) | 2011-02-15 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-15/pom.xml?view=markup}15}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-15/pom.xml?r1=HEAD&r2=831141&diff_format=h}diff}}) | 2010-02-04 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-14/pom.xml?view=markup}14}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-14/pom.xml?r1=HEAD&r2=829596&diff_format=h}diff}}) | 2009-11-02 |
*--------------+------------+
| {{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-13/pom.xml?view=markup}13}} ({{{https://svn.apache.org/viewvc/maven/shared/tags/maven-shared-components-13/pom.xml?r1=HEAD&r2=814155&diff_format=h}diff}}) | 2009-10-28 |
*--------------+------------+
