			 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:
   http://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
