Apache Commons Release Plugin
Version 1.8.0-SNAPSHOT
Release Notes


INTRODUCTION:

This document contains the release notes for the 1.8.0-SNAPSHOT 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.
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_text.cgi

Have fun!
-Apache Commons Team

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

