 -----
 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. 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 properties (<<<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.target")>> (<<<maven.compiler.target>>> property)
     and $context.get("project.build.sourceEncoding") source (<<<project.build.sourceEncoding>>> property).
    
  ** 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 three executions:
    
  ** maven-remote-resources-plugin for {{{/apache-resource-bundles/}org.apache:apache-jar-resource-bundle:1.4}}.

  ** maven-site-plugin:attach-descriptor

  ** maven-enforcer-plugin to check Maven and Java build prerequisites, configured via properties:
 
    *** <<<minimalMavenBuildVersion>>> property: default value is <<Maven $context.get("minimalMavenBuildVersion")>>

    *** <<<minimalJavaBuildVersion>>> property: default value is <<Java $context.get("minimalJavaBuildVersion")>>

    []

 * <<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>10</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 non-numeric 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)
 
 []

 Those files also end up in the staging repository and Maven Central.

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-26...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( 26, '2022-04-09' )
*--------------+------------+
#display( 25, '2022-02-20' )
*--------------+------------+
#display( 24, '2021-07-13' )
*--------------+------------+
#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' )
*--------------+------------+
