 -----
 Apache Software Foundation Parent POM
 -----
 Benson Margulies
 Hervé Boutemy
 Karl Heinz Marbaise
 -----
 2016-05-09
 -----

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

Apache Software Foundation Parent POM

    This project consists of a POM that contains settings that are
    likely to be useful to any Apache project that is building and
    releasing code with Maven 3 (Maven 2.x is not supported any more since version 17). By using this project as a parent,
    a project gets these settings.

    Most projects will want to override some of these settings.

    The following is a list of the items configured in this POM:

 * Top-level project properties:
    
  ** <<license>>: Apache License, version 2.0.
    
  ** <<organization>>: The Apache Software Foundation
    
  ** <<url>>: {{<<<https://www.apache.org/>>>}}. You should override this.
    
  ** <<repositories>>: The pom adds the Apache snapshot
     repository ({{<<<https://repository.apache.org/snapshots>>>}})
    
  ** <<distributionManagement>>: The POM sets up for releases to the Apache Nexus
     instance at
     {{<<<https://repository.apache.org/service/local/staging/deploy/maven2>>>}}
     and snapshots to
     {{<<<https://repository.apache.org/content/repositories/snapshots>>>}}. Note
     that there are POM parameters (<<<distMgmtSnapshotsName>>> and <<<distMgmtSnapshotsUrl>>>)
     that you can override to change the snapshot location. 
    
  ** <<mailingLists>>: The POM sets up generic Apache announcement
     lists. You should override this.
    
 * <<pluginManagement>>: The plugin management section specifies versions
    of a list of plugins. See the {{{./plugin-management.html}Plugin Management report}} for
    the complete list with versions. 
    
  ** The compiler plugin is set to default to <<Java $context.get("maven.compiler.source")>> and $context.get("project.build.sourceEncoding") source.
    
  ** The jar plugin is set to add default specification and implementation entries.
    
  ** The resources plugin is set for $context.get("project.build.sourceEncoding").
    
  ** The release plugin is set, via the
    \<arguments\> configuration element, to enable the
    <<apache-release>> profile for <<all>> executions and to disable
    \<useReleaseProfiles\>.  You can remove this with an empty
    \<arguments/\> element in the configuration of the release plugin.

 * <<plugins>>: The plugins section configures two executions:
    
  ** maven-remote-resources-plugin for {{{/apache-resource-bundles/}org.apache:apache-jar-resource-bundle:1.4}}.

  ** maven-site-plugin:attach-descriptor

 * <<Reproducible Builds>>: since version 22 of this parent POM, managed plugins versions are expected to be compliant with {{{https://reproducible-builds.org/}Reproducible Builds}}.

   To choose the timestamp in output archives, projects using this POM as parent should define a property in their root POM:

+------+
  <properties>
    <project.build.outputTimestamp>2019-10-02T08:04:00Z</project.build.outputTimestamp>
  </properties>
+------+

   The value will be updated by Maven Release Plugin during releases. If a project wants to disable Reproducible Builds, just define
   the property value with any single character.

 []

The <<<apache-release>>> Profile

   As noted above, this pom configures the release plugin to enable
    the <<<apache-release>>> profile for all executions of the release
    plugin.

   The profile includes the following plugins:

 * maven-assembly-plugin:
    {{{/apache-resource-bundles/}org.apache.apache.resources:apache-source-release-assembly-descriptor:1.0.6}}
    is added as dependency, and an execution is configured with <<<source-release-assembly>>> id.\
    The plugin is configured to take a <<<descriptorRef>>> name from the
    <<sourceReleaseAssemblyDescriptor>> property, which by default is
    set to <<<source-release>>> (zip only): you can override the property with
    <<<source-release-zip-tar>>> (both zip and tar) or <<<source-release-tar>>> (tar only) values.\
    If you want to avoid this default assembly execution to provide your own mechanism to produce the source release archive,
    you can disable the execution by configuring <<<skipAssembly>>> parameter for this <<<source-release-assembly>>> execution id

 * maven-deploy-plugin: configured to activate <<<updateReleaseInfo>>>

 * maven-source-plugin: configured to build and attach a source jar.

 * maven-javadoc-plugin: configured to build and attach a javadoc jar.

 * maven-gpg-plugin: configured to sign everything. It expects to find
    a passphrase in <<<$\{gpg.passphrase\}>>>, presumably in your <<<settings.xml>>>.

 * checksum-maven-plugin: configured to create a checksum file(s) for source release as
    required by {{{http://www.apache.org/dev/release-distribution#sigs-and-sums}Apache release distribution policy}}.

 []

  When doing a release with maven-release-plugin, this creates files in <<<target/checkout/target>>> ready
  to be copied to projects' {{{http://www.apache.org/dev/release-distribution}Apache <<</dist/>>> release distribution}}
  directory:

 * <<<$\{artifactId\}-$\{version\}-source-release.[zip|tar.gz]>>>: the source release archive(s)

 * <<<$\{artifactId\}-$\{version\}-source-release.[zip|tar.gz].sha512>>>: their checksum(s)

 * <<<$\{artifactId\}-$\{version\}-source-release.[zip|tar.gz].asc>>>: their signature(s)

Settings Configuration
  
  You can have a look at the page in Apache website
  {{{https://www.apache.org/dev/publishing-maven-artifacts.html}Publishing Maven Artifacts}}.

  You can test your environment setup using <<<-Papache-release>>> with the command line.

History

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

*--------------+------------+
|| <<Version>> || <<Release Date>> ||
*--------------+------------+
#display( 23, '2020-01-25' )
*--------------+------------+
#display( 22, '2020-01-08' )
*--------------+------------+
#display( 21, '2018-08-21' )
*--------------+------------+
#display( 20, '2018-07-07' )
*--------------+------------+
#display( 19, '2018-01-24' )
*--------------+------------+
#display( 18, '2016-05-18' )
*--------------+------------+
#display( 17, '2015-04-24' )
*--------------+------------+
#display( 16, '2014-11-13' )
*--------------+------------+
#display( 15, '2014-09-24' )
*--------------+------------+
#display( 14, '2014-03-06' )
*--------------+------------+
#display( 13, '2013-01-20' )
*--------------+------------+
#display( 12, '2012-11-01' )
*--------------+------------+
#display( 11, '2012-08-08' )
*--------------+------------+
#display( 10, '2011-08-09' )
*--------------+------------+
#display( 9, '2011-02-15' )
*--------------+------------+
#display( 8, '2010-11-26' )
*--------------+------------+
#display( 7, '2009-12-29' )
*--------------+------------+
