Apache Commons Release Plugin
Version 1.8.0
Release Notes


INTRODUCTION:

This document contains the release notes for the 1.8.0 version of Apache Commons Release Plugin: 
An Apache Maven Mojo for Apache Commons Release tasks.

Changes in this version include:

New features:
o COMMONSSITE-138:  Create signature validation script for releases.

Fixed Bugs:
o                   Fail if commons.nexus.repo.id is not defined.
o                   Allow for old-style group ids in vote-txt.
o                   Don't create hash for .asc files.
o                   Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #44. Thanks to Arturo Bernal, Bruno P. Kinoshita.
o                   Replace FindBugs with SpotBugs.
o                   Minor Improvements #34. Thanks to Arturo Bernal.
o                   Workaround UnsupportedOperationException in CommonsDistributionDetachmentMojo.execute due to https://issues.apache.org/jira/browse/MNG-7316. Thanks to Gary Gregory.

Changes:
o                   Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #36.
o                   Bump maven-pmd-plugin from 3.13.0 to 3.15.0 #29 #72.
o                   Bump commons-build-plugin from 1.11 to 1.12 #25.
o                   Bump actions/setup-java from v1.4.0 to v2 #11 #19 #49.
o                   Bump spotbugs from 4.1.1 to 4.6.0 #10 #24 #30 #37 #41 #51 #59 #68 #71 #80 #93 #98. Thanks to Gary Gregory.
o                   Bump spotbugs-maven-plugin from 4.1.1 to 4.5.3.0 #20 #26 #33 #45 #52 #61 #74 #79 #81 #88 #94 #99.
o                   Update JUnit from 4.12 to 4.13.2, #23 #39.
o                   Bump maven.dependency.version from 3.6.1 to 3.8.4 #47 #76 #86. Thanks to Gary Gregory, Dependabot.
o                   Update commons-io:commons-io from 2.6 to 2.11.0 #13 #63.
o                   Update checkstyle from 8.34 to 9.3 #5, #12, #14, #27, #31, #35, #40, #46, #53, #58, #64, #65, #69, #77, #84, #91, #95, #101.
o                   Update actions/checkout from v2.3.1 to v3 #8, #16, #28, #78, #83, #103.
o                   Update velocity-engine-core from 2.1 to 2.3 #4 #43.
o                   Update commons-codec from 1.13 to 1.15.
o                   Bump actions/cache from v2 to v2.1.7 #38, #50, #56, #87. Thanks to Dependabot.
o                   Bump maven.plugin.version from 3.6.0 to 3.6.4 #54, #89, #97. Thanks to Dependabot.
o                   Bump jacoco-maven-plugin from 0.8.5 to 0.8.7 (Fixes Java 15 builds) #55. Thanks to Gary Gregory, Dependabot.
o                   Bump plexus-velocity from 1.2 to 1.3 #60. Thanks to Dependabot.
o                   Bump commons-compress from 1.19 to 1.21 #62. Thanks to Gary Gregory, Dependabot.
o                   Replace JUnit from 4.13.2 to 5.7.2 vintage. Thanks to Gary Gregory.
o                   Bump maven-scm.version from 1.11.2 to 1.12.2 #66, #73, #96. Thanks to Dependabot.
o                   Bump junit-vintage-engine from 5.7.2 to 5.8.2 #70, #75, #90. Thanks to Dependabot.
o                   Bump taglist-maven-plugin from 2.4 to 3.0.0 #100. Thanks to Dependabot.


Historical list of changes: https://commons.apache.org/proper/commons-release-plugin//changes-report.html

For complete information on Apache Commons Release Plugin, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Release Plugin website:

https://commons.apache.org/proper/commons-release-plugin/

Download page: https://commons.apache.org/proper/commons-release-plugin/download_commons-release-plugin.cgi

Have fun!
-Apache Commons Team

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.7
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.7 version of Apache commons-release-plugin.
The commons-release-plugin is meant to be a mechanism for automating The Apache Commons Project's
release process.

The Apache Commons Release Plugin is a collection of Java based Maven mojos for Apache Commons
Release process. These mojos are intended to be used as a collection of steps to be strung
together for the purpose of removing the manual steps required to produce an Apache Commons Release.


Changes in this version include:

CHANGES
=======
o checkstyle.version from 8.10.1 to 8.18
o VOTE.txt: Sample git clone command should checkout in a folder named after the tag
o VOTE.txt: Sort the file names being hashed
o maven.dependency.version from 3.5.3 to 3.6.0
o org.apache.maven.scm from 1.10.0 to 1.11.2
o maven-pmd-plugin from 3.9.0 to 3.11.0
o commons-build-plugin from 1.8 to 1.10
o commons.jacoco.version from 0.8.2 to 0.8.3
o velocity-engine-core from 2.0 to 2.1
o maven.dependency.version from 3.6.0 to 3.6.1
o checkstyle.version from 8.18 to 8.19
o maven-pmd-plugin from 3.11.0 to 3.12.0
o com.puppycrawl.tools:checkstyle from 8.19 to 8.20
o Update Apache Commons Collections from 4.3 to 4.4
o Update Apache Commons Compress from 1.18 to 1.19

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.6
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.6 version of Apache commons-release-plugin.
The commons-release-plugin is meant to be a mechanism for automating The Apache Commons Project's
release process.

The Apache Commons Release Plugin is a collection of Java based Maven mojos for Apache Commons
Release process. These mojos are intended to be used as a collection of steps to be strung
together for the purpose of removing the manual steps required to produce an Apache Commons Release.


Changes in this version include:

NEW FEATURES
============
o COMMONSSITE-128:  Release plugin cleans up staging area before staging


CHANGES
=======
o Update Apache Commons Codec from 1.11 to 1.12.

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.5
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.5 version of Apache commons-release-plugin.
The commons-release-plugin is meant to be a mechanism for automating The Apache Commons Project's
release process.

The Apache Commons Release Plugin is a collection of Java based Maven mojos for Apache Commons
Release process. These mojos are intended to be used as a collection of steps to be strung
together for the purpose of removing the manual steps required to produce an Apache Commons Release.


Changes in this version include:

NEW FEATURES
============
o COMMONSSITE-123:  introduce configuration parameter to perfom distribution checkin using Maven settings server credentials

FIXED BUGS
==========
o ReadmeHtmlVelocityDelegate, accommodate for artifactIds ending in numbers
o ReadmeHtmlVelocityDelegate, bcel's artifactId != commons-bcel, but is just bcel
o COMMONSSITE-122:  stage-distributions mojo assumes site directory has basename 'site'

CHANGES
=======
o vote-txt, use github as opposed to git-wip
o Drop sha-256 and leave sha-512 only
o commons.jacoco.version: 0.8.0 -> 0.8.2; java 11 compatibility

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.4
                                 Release Notes

FIXED BUGS
==========
o Check the result of checking out files from the SCM.

CHANGES
=======
o Better error message when files cannot be checked in to the SCM.
o COMMONSSITE-120: [release-plugin] Use SHA-256 and SHA-512, not MD5, not SHA-1.
o Update Apache Commons Compress from 1.17 to 1.18.


=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.3
                                 Release Notes

NEW FEATURES
============
o COMMONSSITE-112:  Add a vote.txt file.
o COMMONSSITE-108:  Adding README.html and HEADER.html to staged release


CHANGES
=======
o COMMONSSITE-117: Remove md5 signatures from release artifacts.
o COMMONSSITE-113: Put unpacked site in scm dev dist directory for navigating purposes.
o Update platform requirement from Java 7 to Java 8.


=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.2
                                 Release Notes

FIXED BUGS
==========

o COMMONSSITE-107: Adding ./target/commons-release-plugin/scm/RELEASE-NOTES.txt
                   to svn as opposed to ./RELEASE-NOTES.txt


=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.1
                                 Release Notes

NEW FEATURES
============

o COMMONSSITE-98:  Making the project more multi-module compatible

FIXED BUGS
==========

o COMMONSSITE-104: Sha1 signature files now reflect actual signatures.
o COMMONSSITE-102: Commons Release Plugin doesn't work with Commons Release Plugin
o COMMONSSITE-101: Make -Dcommons.release.dryRun=true our commit toggle



=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.0
                                 Release Notes

NEW FEATURES
============

o COMMONSSITE-96:   Create commons-release-component project skeleton.
o COMMONSSITE-99:   Prepare Standard Build integrations, travis, jacoco, checkstyle, etc.
o COMMONSSITE-97:   Documentation for commons-release-plugin.


Historical list of changes: https://commons.apache.org/release-plugin/changes-report.html

For complete information on the Apache commons-release-plugin, including instructions on how
to submit bug reports, patches, or suggestions for improvement, see the Apache commons-release-plugin's
website:

https://commons.apache.org/release-plugin/

Have fun!
-Apache Commons Release Plugin team

