blob: 11f808aeba39f94f2097188d2e5d932bf182d5a8 [file] [log] [blame]
Apache Software Foundation Parent POM
Benson Margulies
Hervé Boutemy
Karl Heinz Marbaise
~~ 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
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ 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:
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>>: {{<<<>>>}}. You should override this.
** <<repositories>>: The pom adds the Apache snapshot
repository ({{<<<>>>}})
** <<distributionManagement>>: The POM sets up for releases to the Apache Nexus
instance at
and snapshots to
{{<<<>>>}}. 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("") source.
** The jar plugin is set to add default specification and implementation entries.
** The resources plugin is set for $context.get("").
** 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 {{{}Reproducible Builds}}.
To choose the timestamp in output archives, projects using this POM as parent should define a property in their root POM:
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
The profile includes the following plugins:
* maven-assembly-plugin:
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 {{{}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' {{{}Apache <<</dist/>>> release distribution}}
* <<<$\{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
{{{}Publishing Maven Artifacts}}.
You can test your environment setup using <<<-Papache-release>>> with the command line.
#if( $project.version.endsWith( "SNAPSHOT" ) )
master: {{{}$project.version}}
#macro ( display $version $date )
#**##set( $prev = $version - 1 )
| {{{$version/pom.xml}$version}}
| ({{{$prev...apache-$version}diff}}) | $date |
|| <<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' )