			 Apache Commons Build Plugin
			       Release Notes


INTRODUCTION:

The Apache Commons Build Plugin is a Maven Plugin which can be used by Apache Commons components.

See:
   https://commons.apache.org/commons-build-plugin/


VERSION 1.10 - 2019-02-26
-------------------------

Changes since the last release:
1. Use SHA512 signatures as the default in the download page. (update; ggregory)
2. Use SHA256 signatures as the default in the download page. (update; sebb)

VERSION 1.9 - 2018-06-16
------------------------

Changes since the last release:
1. Fix in src/main/resources/commons-xdoc-templates/readme-md-template.md for components that have a major version number in their artifact IDs.
2. Add a goal for creating all items for pre-release. 
3. Fix README.md generation typo: 'JavaDoc' -> 'Javadoc'.
4. Change the Maven goal prefix from "commons" to "commons-build".
5. Add a goal for generating the NOTICE.txt file.
6. Update platform requirement from Java 7 to Java 8.

VERSION 1.8 - 2018-04-02
------------------------

Changes since the last release:
1. Fix EOL-style so generated files have correct setting
2. Change download page from MD5 to SHA1
3. Include Javadoc badge in README.md file.

VERSION 1.7 - 2016-11-18
------------------------

Changes since the last release:
1. Include badges in the README.md file.  Issue: COMMONSSITE-90. 
2. Build plugin does not pass the JIRA_ID property when generating README.md.  Issue: COMMONSSITE-91. 

VERSION 1.6 - 2016-04-24
------------------------

Changes since the last release
1. Added new download-page subdir property: set this (e.g. to '1.2' or 'lang-1.2' etc) to override the default of binaries/source 

VERSION 1.5 - 2015-11-28
------------------------

Changes since the last release:
1. Added new goals: contributing-md and readme-md - to build Markdown formatted intro files for GitHub.
2. Download Page - Better describes KEYS file (and uses https links) 
3. Use Apache Commons rather than just Commons

VERSION 1.4 - 2012-03-06
------------------------

Changes since the last release:
1. Fix announce mod_mbox link
2. Mailing List Page - Make it clear that you have to be subscribed to post.
3. COMMONSSITE-66 - Add support for a "commons.release.3" set of properties to offer a 3rd download option.

VERSION 1.3 - 2010-04-15
------------------------

Changes since the last release:
1. Add facility to generate custom mailing list page
2. Add new ${commons.release.name} property for the download page generation


VERSION 1.2 - 2010-02-23
------------------------

Changes since the last release:
1. Improve the L&F of the download page
2. Add facility to add a second version to the download page
3. Upgrade to commons-parent version 12

VERSION 1.1 - 2008-07-16
------------------------

Changes since the last release:
1. Upgrade to commons-parent version 10
2. Add assembly descriptors
3. Minor documentation corrections
4. COMMONSSITE-36 - plugin won't build because of missing OSGi manifest file.
5. COOMONSSITE-35 - Upgrade to Ant 1.7.1 (fixes two problems/bugs when generating
                    Jira/download pages).

VERSION 1.0 - 2008-02-24
------------------------
Initial Release
