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 Text.
Commons Text is a set of utility functions and reusable components for the purpose of processing
and manipulating text that should be of use in a Java environment.


Apache Maven Mojo for Apache Commons Release tasks.

Version 1.8

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.

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_text.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

