Rat 0.16
========
Apart from dependency updates and multiple bugfixes, this release brings the ability to use SPDX license identifiers and enhances the .gitignore-exclusion filterung during RAT runs.
Furthermore new CLI options were added and new file types can be used by default. This release makes RAT a fully Maven3-compatible plugin and removes deprecated Maven2 completely.
Thanks to all new contributors for improving RAT!

New features:
o RAT-338:  Update minimal build Maven version to 3.2.5 and maven dependencies to 3.9.6. Remove pre-JDK8 code constructs and minor refactorings. Thanks to Tamás Cservenák.
o RAT-335:  Enhance .gitignore handling; support multiple .gitignore files and allow a more complete parsing of Git's ignore files. Thanks to Niels Basjes.
o RAT-322:  Add configuration option to scan hidden directories: --scan-hidden-directories on the command line and scanHiddenDirectories as a Maven plugin parameter. Thanks to Jean-Baptiste Onofré.
o RAT-320:  Add new command line option -o/--output to write RAT's output to a file. Thanks to Jean-Baptiste Onofré.
o RAT-329:  Add markdown (MD) and yaml (YML/YAML) as a recognized extension for file and license processing. Thanks to Claude Warren.
o RAT-316:  Add default exclusion of MANIFEST.MF as it must not contain comment lines to include a license.
o RAT-321:  Allow text-based XML configuration of RAT. Thanks to Claude Warren.

Fixed Bugs:
o RAT-326:  Fix existing javadoc build errors and add javadoc generation to existing GithubActions to not introduce build errors via merge requests.
o RAT-328:  Ensure that System.out does not get closed during report generation and updated javadocs. Thanks to Claude Warren.
o RAT-311:  Update commons-compress to 1.24.0 in order to circumvent CVE-2023-42503.
o RAT-251:  Added SPDX processing for default licenses. Thanks to Claude Warren.
o RAT-315:  Fix warnings when using RAT with newer Maven versions as methods from Maven v2 are deprecated. Minimum version of required Maven changed to 3.2.5. Thanks to Guillaume Nodet.
o RAT-317:  Change log output level of SCM ignore parser from info to debug in order to produce less log output in RAT runs. Thanks to Gary Gregory.
o RAT-314:  Add default recursive exclusion for maven-induced build artifacts in folder .mvn. Thanks to François Guillot.
o RAT-312:  Remove Travis build as it is unreliable. Builds with ASF Jenkins and Github Actions remain as before.

Changes:
o RAT-311:  Update actions/setup-java from 3.4.1 to 4.0.0. Thanks to dependabot.
o RAT-311:  Update actions/cache from 3.0.11 to 3.3.2 Thanks to dependabot.
o RAT-311:  Update actions/checkout from 3 to 4. Thanks to dependabot.
o RAT-311:  Update mockito-core from 4.7.0 to 4.11.0, newer versions 5.x cannot be applied due to our JDK8-compatibility restriction. Thanks to dependabot.
o RAT-311:  Update plexus-utils from 3.4.2 to 3.5.1, versions 4.x are for upcoming Maven4 and must not be applied here. Thanks to dependabot.
o RAT-311:  Update maven-plugin-version from 3.6.4 to 3.8.2. Thanks to dependabot.
o RAT-311:  Update wagon-ssh from 3.5.2 to 3.5.3. Thanks to dependabot.
o RAT-311:  Update Ant from 1.10.12 to 1.10.14. Thanks to dependabot.
o RAT-311:  Update ASF parent pom from 27 to 31 and update multiple maven plugin versions implicitly (surefire, release, project-info, enforcer, jxr). Thanks to dependabot.
o RAT-311:  Update doxiaVersion from 1.11.1 to 1.12.0. Thanks to dependabot.
o RAT-311:  Update maven-shared-utils from 3.3.4 to 3.4.2. Thanks to dependabot.
o RAT-311:  Update org.slf4j:slf4j-simple from 1.7.36 to 2.0.9. Thanks to dependabot.
o RAT-311:  Update commons-lang3 from 3.5 to 3.14.0. Thanks to dependabot.
o RAT-311:  Update commons-compress from 1.21 to 1.25. Thanks to dependabot.
o RAT-311:  Update commons-io from 2.11.0 to 2.15.1. Thanks to dependabot.
o RAT-311:  Update commons-cli from 1.5.0 to 1.6.0. Thanks to dependabot.
o RAT-311:  Update maven-pmd-plugin from 3.18.0 to 3.21.2. Thanks to dependabot.
o RAT-311:  Update maven-dependency-plugin from 3.3.0 to 3.6.1. Thanks to dependabot.
o RAT-311:  Update maven-compiler-plugin from 3.10.1 to 3.12.1. Thanks to dependabot.
o RAT-311:  Update maven-javadoc-plugin from 3.4.1 to 3.6.3. Thanks to dependabot.
o RAT-311:  Update maven-release-plugin from 2.5.3 to 3.0.1. Thanks to dependabot.
o RAT-311:  Update maven-enforcer-plugin from 3.1.0 to 3.4.1. Thanks to dependabot.
o RAT-311:  Update extra-enforcer-rules from 1.6.1 to 1.7.0 Thanks to dependabot.
o RAT-311:  Update maven-release-plugin from 2.5.3 to 3.0.1. Thanks to dependabot.
o RAT-311:  Update animal-sniffer-maven-plugin from 1.22 to 1.23. Thanks to dependabot.
o RAT-311:  Update maven-project-info-reports-plugin from 3.4.1 to 3.5.0. Thanks to dependabot.
o RAT-311:  Update maven-surefire-plugin from 3.2.2 to 3.2.3. Thanks to dependabot.

Rat 0.15
========
This release fixes a warning during site builds and updates various dependencies.

Fixed Bugs:
o RAT-309:  Site builds could not be generated properly due to API changes: solution was to upgrade Maven Reporting API to 3.1.1 and use details of Maven Reporting Implementation 3.2.0 in RAT's Mojo hierarchy. Thanks to Michael Osipov, Gary Gregory.
o RAT-309:  Updated internal data structures from deprecated ArrayStack to JDK's ArrayDeque.
o RAT-306:  Add note about hierarchy of changelogs in RAT project structure when publishing the project webpage.
o RAT-307:  Update to focal (Ubuntu 20.04) on Travis to circumvent build errors and be able to use more modern JDK versions. Deprecate openJDK8 build with focal as it is not supported on Travis.

Changes:
o RAT-305:  Update maven-project-info-reports-plugin from 3.3.0 to 3.4.1. Thanks to dependabot.
o RAT-305:  Update maven-javadoc-plugin from 3.4.0 to 3.4.1. Thanks to dependabot.
o RAT-305:  Update maven-jxr-plugin from 3.2.0 to 3.3.0. Thanks to dependabot.
o RAT-305:  Update animal-sniffer-maven-plugin from 1.21 to 1.22. Thanks to dependabot.
o RAT-305:  Update maven-site-plugin from 3.12.0 to 3.12.1. Thanks to dependabot.
o RAT-305:  Update maven-pmd-plugin from 3.16.0 to 3.18.0. Thanks to dependabot.
o RAT-305:  Update mockito-core from 4.6.0 to 4.7.0. Thanks to dependabot.
o RAT-305:  Update extra-enforcer-rules from 1.5.1 to 1.6.1. Thanks to dependabot.
o RAT-305:  Update Apache parent pom from 26 to 27. Thanks to dependabot.
o RAT-305:  Update wagon-ssh from 3.5.1 to 3.5.2. Thanks to dependabot.
o RAT-305:  Update maven-enforcer-plugin from 3.0.0 to 3.1.0. Thanks to dependabot.
o RAT-305:  Update actions/setup-java from 3.3.0 to 3.4.1. Thanks to dependabot.
o RAT-310:  Fix deprecation warnings in tests. Use hamcrest's annotations instead of ones from JUnit.

Rat 0.14
========
This release contains dependency updates, bugfixes and many improvements apart from infrastructure updates at ASF.

New features:
* RAT-288:  Adapt logging output to be more compliant with future Maven versions as debug is deprecated and verbose is the recommended way to go. Thanks to Michael Osipov.
* RAT-297:  Update maven-reporting-api from 3.0 to 3.1.0 and remove usage of deprecated Sink API. Thanks to Michael Osipov.
* RAT-289:  Enable dependabot integration - write access is forbidden, but email alerts and pull requests should be ok.
* RAT-279:  Migrate vom Travis CI.org to Travis-ci.com.
* RAT-271:  Move all Creadur projects to new Jenkins infrastructure at ASF and migrate from Subversion to Gitbox/Github. Please update your repository URLs and use the new default branch master in all projects.
* RAT-270:  Change default behaviour to output erroneous files to console. Can be disabled by setting rat.consoleOutput to false.
* RAT-266:  Add .factorypath to Eclipse-default exclusions. Thanks to Michael Osipov.
* RAT-254:  Properly finish move to gitbox/github, get rid of SVN references and adapt main branch to master and fix all Jenkins build jobs for RAT.
* RAT-244:  Update compiler level to 1.7 to allow building with more recent JDKs. Update plugins and dependencies to more modern versions to fix security issues (CVE-warnings).
* RAT-212:  Add alternative https URLs in Apache License, Version 2.0 to allow automatic recognition as valid ASF2.0. Thanks to Niels Basjes.
* RAT-250:  Update to latest available and compatible Apache ANT 1.9.14 to get bugfixes.
o INFRA-17348: SCM repository has been moved from svn.apache.org (Subversion) to gitbox.apache.org (Git)

Fixed Bugs:
* RAT-290:  Update maven-jxr-plugin from 2.5 to 3.2.0. Thanks to dependabot.
* RAT-290:  Update maven-antrun-plugin from 3.0.0 to 3.1.1. Thanks to dependabot.
* RAT-290:  Update github actions/checkout from 2 to 3. Thanks to dependabot.
* RAT-290:  Update github actions/setup-java from 2.5.0 to 3.3.0. Thanks to dependabot.
* RAT-290:  Update maven-pmd-plugin from 3.14.0 to 3.16.0. Thanks to dependabot.
* RAT-290:  Update maven-javadoc-plugin from 3.3.1 to 3.4.0. Thanks to dependabot.
* RAT-290:  Update maven-compiler-plugin from 3.8.1 to 3.10.1. Thanks to dependabot.
* RAT-290:  Update wagon-ssh from 3.5.0 to 3.5.1. Thanks to dependabot.
* RAT-290:  Update maven-site-plugin from 3.9.1 to 3.12.0. Thanks to dependabot.
* RAT-290:  Update maven-project-info-reports-plugin from 3.1.1 to 3.3.0. Thanks to dependabot.
* RAT-290:  Update mockito-core from 3.11.2 to 4.6.0. Thanks to dependabot.
* RAT-290:  Update ASF parent from 23 to 26. Thanks to dependabot.
* RAT-273:  Some tests were based on the assumption, that the value of file.encoding
            can be changed on runtime. (Won't work nowadays, beginning with Java 16.)
            Removed this assumption in favour of a proper surefire configuration.
* RAT-273:  Workaround for an incompatibility in the java.io.LineNumberReader, which is
            being replaced by the org.apache.rat.header.LineNumberReader.
* RAT-290:  Update animal-sniffer-maven-plugin from 1.20 to 1.21. Thanks to Jin Xu/Xeno Amess.
* RAT-296:  Use Github Actions for matrix builds on Windows and ubuntu with JDK 8,11,12,13,14,15. Simplify Travis integration to avoid dockerhub-related build failures.
* RAT-274:  Update to latest Apache Ant 1.10.12.
* RAT-291:  Fix links to Travis builds for all creadur projects.
* RAT-290:  Update maven-dependency-plugin from 3.1.1 to 3.2.0. Thanks to dependabot.
* RAT-290:  Update plexus-utils from 3.0.21 to 3.4.1. Thanks to dependabot.
* RAT-290:  Update commons-cli from 1.4 to 1.5.0. Thanks to dependabot.
* RAT-290:  Update maven-plugin-annotation and maven-plugin-plugin from 3.6.1 to 3.6.2. Thanks to dependabot.
* RAT-275:  Update to doxia 1.11.1 in order to get CVE-2020-13956-httpclient problem fixes in doxia.
* RAT-283:  Update plugin versions and dependencies in order to run properly with Java8 as minimal compiler level.
* RAT-286:  Update to maven-plugin-plugin v3.6.1 in order to circumvent error during maven site builds.
* RAT-285:  Update to latest Apache Ant 1.10.11 in order to fix issues related to dependency commons-compress in Ant itself.
* RAT-207:  Properly report thread-safeness to Maven. Thanks to Xavier Dury.
* RAT-281:  Update to latest Commons IO to fix CVE-2021-29425 (Moderate severity).
* RAT-274:  Update to latest Apache Ant 1.10.10.
* RAT-277:  Update to junit 4.13.1 to fix CVE-2020-15250.
* RAT-158:  Update to new ASF parent 23 in order to get rid of doxia version management that generated warnings.
* RAT-274:  Update to latest Apache Ant 1.10.9 to fix CVE-2020-11979. Update to JDK8 as minimal version/compiler version.
* RAT-269:  Update to latest Apache Ant to fix CVE-2020-1945.
* RAT-268:  Allow handling of pom-file-only projects by not assuming that all modules are in directories. Thanks to Robert Scholte.
* RAT-267:  Report ignored lines from exclusion file to stderr instead of std to not generate erroneous JSON. Thanks to Fabio Utzig.
* RAT-262:  Treat JSON data as binary to avoid reports of missing licenses.
* RAT-260:  Change to docker image when building on Travis to avoid JDK version mixup in traditional build setup. Thanks to Kamil Breguła.
* RAT-258:  Update to latest commons-compress to fix CVE-2019-12402.
* RAT-257:  Adapt help text for CLI usage of RAT.

Rat 0.13
=========

 * Compiler level is set to JDK8 (1.8) to be able to update dependencies properly.

New features:
* RAT-228:  Fixing broken Ant unit test setup and making tests run more deterministic. Thanks to Romain Manni-Bucau.
* RAT-245:  Update to latest available and compatible Apache ANT 1.9.12 to get bugfixes and newer JDK support.
* RAT-245:  Update to latest available and compatible Apache ANT 1.9.11 to get bugfixes and newer JDK support.
* RAT-245:  Update to latest available and compatible Apache ANT 1.9.10 due to CVE-2017-5645.
* RAT-243:  Add .checkstyle to Eclipse default exclusions. Thanks to Matthew Ouyang.
* RAT-241:  Reduce default log level of used exclusions to debug, only print totals into the maven log like includes. Thanks to Andrew Gaul.
* RAT-233:  Recognize XML-based .Net Core xproj files. Thanks to Stefan Bodewig.
* RAT-226:  Update to latest available and compatible Apache ANT 1.9.9.

Fixed Bugs:
* RAT-242:  Use UTF-8 as default encoding for RAT Ant reports. Thanks to Matthias Bläsing.
* RAT-234:  Do not treat TypeScript files as binary. Thanks to ajbanck.
* RAT-240:  Overhauled CLI module to allow file based exclusions with wildcards and explicit file names.
* RAT-222:  Download section does not work if SNAPSHOT is deployed, add download of previous RAT release.
* RAT-224:  Fixed example on webpage abozt usage of custom licenses. Thanks to John Patrick.
* RAT-223:  Add support for Golang and Perl module files. Thanks to Eric Friedrich.

Rat 0.12
========

 * We now require Maven 3.0.5+ to build Rat, but as before we only require
   Maven 2.2.1+ if you want to use Rat in your own Maven projects.
 * We've integrated Rat into the ASF Jenkins to ensure continuous builds with various JDK versions.
 * Issues resolved (see https://issues.apache.org/jira):
   Bug
    * [RAT-158] - Fix SAX-Parser warning by explicitly excluding xerces in Doxia 1.2.
                  (thanks to Hervé Boutemy)
    * [RAT-173] - Allow complete skip of RAT plugin with rat.skip property
                  (thanks to Chris Burroughs)
    * [RAT-174] - CDDL1License still very slow, replace Pattern matching with simple String comparison
                  (thanks to Chris Burroughs)
    * [RAT-175] - SourceCodeManagementSystems.hasIgnoreFile() should return boolean
    * [RAT-177] - final arrays should be private
    * [RAT-188] - Fix problems with AnimalSniffer-plugin when running in GUMP with Java 8.
                  Workaround for https://jira.codehaus.org/browse/MANIMALSNIFFER-45
                  (thanks to Mark Thomas)
    * [RAT-160] - Ignore build.log that is created by maven-invoker-plugin runs. Temporary fix until invoker plugin improves
                  configurability of that file.
                  (thanks to Christopher Tubbs)
    * [RAT-179] - Maven plugin and Ant task do not support adding extra approved licenses.
    * [RAT-180] - Generify and beautify texts in RAT report.

   New features
    * [RAT-171] - Maven plugin allows scanning of source code management ignore files. Their contents is added as exclusion to be ignored during RAT runs.
                  Supported source code management systems are: SVN, Git, Bazaar, Mercurial and CVS.
                  An ignore-file's contents is taken as it is without parsing or validating.

   Improvement
    * [RAT-196] - Minor refactoring in pom.xml.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-194] - Upgrade to Doxia 1.6 if called directly, does not affect problems reported in RAT-158. Minor improvements.
                  (thanks to Hervé Boutemy)
    * [RAT-61]  - List files with unapproved licenses in Maven output
    * [RAT-170] - RAT should use itself during build and site generation
    * [RAT-181] - BinaryGuesser should treat *.truststore as binary
    * [RAT-184] - Add DEPENDENCIES to the list of ignored files in NoteGuesser.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-185] - .repository folder should be ignored
    * [RAT-186] - BinaryGuesser should recognize PSD files as images
    * [RAT-187] - Add 'SAR', 'HAR', 'WSR' as archives which should be ignored.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-197] - Improve exclusion defaults when working with Maven 3.3.1 (exclude .mvn).
                  (thanks to Karl Heinz Marbaise)
    * [RAT-198] - Upgrade to plexus-utils 3.0.20.
                  (thanks to Karl Heinz Marbaise)
    * [RAT-172] - Exclude technical directories of source code management systems and their ignore files from RAT scans.
                  Enabled for SVN,Git,Mercurial,Bazar and CVS.
    * [RAT-200] - Update to latest ASF parent pom v17.
    * [RAT-201] - BinaryGuesser should treat *.swf as binary.
                  Furthermore BinaryGuesser falls back to UTF-8 encoding in case the encoding given via system property (-Dfile.encoding) was not found.
    * [RAT-202] - Report layout differs between successful RAT checks and existence of unapproved files.
    * [RAT-203] - Using 'license' in README, source code, javadoc, comments and site instead of 'licence'; improve terminology to not confuse RAT consumers.
    * [RAT-204] - Unify resource handling in code and tests, make sure the resources are properly closed. Apply minor refactorings.
    * [RAT-213] - Upgrade to commons-collections 3.2.2.
                  (thanks to Glenn Lewis)

Rat 0.11
========

 * Rat stays at compiler level 1.5 to be more compliant with other Maven plugins,
   fixed build/CI environment to reflect and ensure that.
 * Fixed Javadoc warnings during build, upgraded Maven Plugin Plugin to avoid
   warnings in generated code (https://jira.codehaus.org/browse/MPLUGIN-237)
 * Issues resolved (see https://issues.apache.org/jira):
   Bug
    * [RAT-135] - addLicenseHeaders is missing a space on license header.
    * [RAT-144] - AbstractRatMojo String constant arrays should be private
    * [RAT-148] - LicenseAddingReport#report has useless call to metaData.getData
                  (thanks to Chris A. Mattmann)
    * [RAT-151] - Detect more archive file formats
    * [RAT-152] - Recognize the format for .bsh, .fml and .jsp file types
    * [RAT-153] - Do not add extra empty lines when appending headers for the Apache License
    * [RAT-154] - Indentation of the license header should be decided per family
    * [RAT-155] - Do not add empty first and last lines in the license header for certain families
    * [RAT-156] - Add some symmetry when applying license headers to files with file type specific headers
    * [RAT-159] - Detect OpenOffice documents as being archives
  Improvement
    * [RAT-129] - Add support for CDDL 1.0
    * [RAT-162] - CDDL1License.matches slow with large inputs
                  (thanks to Andrew Gaul)
    * [RAT-164] - Allow skipping execution entirely
    * [RAT-165] - Use a maven defaultGoal for RAT's base pom.xml

Rat 0.10
========
The main change is RAT-138 - Rat 0.9 could run much slower than 0.8 on some input.

 * Simpler binary archive
 * Issues resolved (see https://issues.apache.org/jira):
   * Bugs fixed:
     * [RAT-137] Website shows incorrect Maven goals in some pages
     * [RAT-128] Use the proper name for the Apache License
     * [RAT-138] RAT runs very slowly on some input
     * [RAT-140] OASISLicense allows invalid Copyright line
     * [RAT-139] FullTextMatchingLicense.prune uses inefficient deleteAtChar
     * [RAT-145] Maven plugin should not run in the "verify" phase, but in the "validate" phase
   * Improvements:
     * [RAT-129] Add support for CDDL 1.0
 * Updated dependencies and plugins
 * Fixed up generics and annotations

Rat 0.9
=======
 * Improved documentation
 * Rat now requires Java5 at runtime
 * The Antlib contains a new matcher type that allows matching on the
   full text of the license rather than a single line.
 * Support automatic addition of license headers to svg files.
 * Issues Resolved (see https://issues.apache.org/jira):
   * Bugs Fixed:
     * [RAT-3]   - Incorrect alignment of file contents
     * [RAT-102] - typo in pom.xml / field description
     * [RAT-109] - Return value of mkdirs() is not checked
                   and no error handling occurs
     * [RAT-116] - Docs don't say what the default excludes are
     * [RAT-120] - fix some maven warning and upgrade some
                   dependencies.
     * [RAT-121] - use maven java5 annotations for maven plugins
     * [RAT-122] - Maven Plugin: field to ignore errors and continue
                   the build
     * [RAT-124] - Rat plugin should exclude the configuration directory
                   used by IDEA
     * [RAT-126] - Default excludes do not ignore .git/ repository
   * Improvements:
     * [RAT-13]  - [GOOGLE-14] GNU License support
     * [RAT-49]  - Recognise MIT LIcense
     * [RAT-104] - Using jUnit4 annotation based tests instead of
                   junit3 - migration from junit 3.8.2 to current
                   junit 4.10
     * [RAT-106] - Minor Javadoc errors fixed in 3 files
     * [RAT-108] - Add native support for thrift generated code to be
                   ignored
     * [RAT-111] - RAT does not ignore javah generated files
     * [RAT-125] - Support applied AL20 license headers, including
                   checking for required copyright header line
   * New Features
     * [RAT-78]  - Support doxia 1.1.2
   * Tasks
     * [RAT-59]  - Upgrade To Java 1.5
     * [RAT-119] - Upgrade Maven prerequisite to 2.2.1

Rat 0.8
=======
 * Some website fixes
 * The Antlib and Maven plugins now provide simpler ways to detect
   licenses not directly supported by Rat.
 * Issues Resolved (see https://issues.apache.org/jira):
  * Bug:
    * RAT-86 CLI doesn't allow adding of licenses unless a custom
      stylesheet has been specified
    * RAT-87 Tests could leave temporary files around.
    * RAT-92 When adding licenses Rat used \n instead of the platform
      dependent line--end character(s)
    * RAT-94 Streams were not always closed immediately when adding
      licenses.
  * Improvement:
    * RAT-79 Support automatic addition of license headers to Velocity
      templates
    * RAT-83 Support automatic addition of license headers to Scala
      source files
    * RAT-84 Support automatic addition of license headers to Ruby
      source files
    * RAT-89 Support automatic addition of license headers to Perl,
      TCL, C++, C# and PHP source files
    * RAT-91 Support automatic addition of license headers to Groovy
      source files
    * RAT-85 Allow --addLicense as an alias for --addLicence for
      people used to the US spelling.
    * RAT-34 --addLicense will add the license to the top of Java
      files without a package line or XML files without an XML
      declaration now - it used to not add anything.
    * RAT-67 The XML and standard plain text reports now contain a
      timestamp with the time the report has been generated.
    * RAT-95 When adding licenses Rat will now remove any BOM from the file.
    * RAT-93 --addLicense now supports more .NET specific files like
      MS Visual Studio project and solution files
    * RAT-99 The command line interface has a new option that
      specifies a file containing regular expressions for files to exclude

Rat 0.7
=======
 * Some website fixes
 * Issues Resolved (see https://issues.apache.org/jira):
  * Bug:
    * RAT-62 Some of Rat's own files missing License Headers
    * RAT-63 ant-task-examples.xml has an wrong uri in the -typedef ant target
    * RAT-70 Missing closing html tag in generated report by
  * Improvement:
    * RAT-17 Support the use of archives as input
    * RAT-30 / RAT-76 Support automatic addition of license headers
    * RAT-52 Merge In Rat Output Semantics
    * RAT-56 Commons IO Wildcard Excludes
    * RAT-65 Rat Pom cleanup
    * RAT-68 Add support for Python, C, & script files (.bat & .sh)
    * RAT-72 Keep version in plugins sample doc up to date
    * RAT-73 / RAT-74 Support for XML output in Ant task and Maven Plugin
    * RAT-74 / RAT-75 Support for custom XSLT stylesheets

Rat 0.6
===========
 * Support for TMF header
 * Comprehend PEM, CRL file endings
 * Added reporting capability to recursive rat script
 * Moved to the Incubator@Apache
 * Issues Resolved (see https://issues.apache.org/jira):
  * Bug:
    * RAT-3 Incorrect alignment of file contents
    * RAT-11 Incorrect number of unnapproved licences reported
    * RAT-12 Incorrect SCM info in maven plugin pom
    * RAT-29 NPE on &quot;mvn install&quot; in rat-anttasks
    * RAT-33 Mailing list subscribe points to unsubscribe
    * RAT-34 No license header added for java files that do not contain project line
    * RAT-35 Incorrect number of unapproved licenses reported by rat:check
    * RAT-36 Report header incorrectly refers to an &quot;L&quot; license marker
  * Improvement:
    * RAT-8 [PATCH] add JavaCC to GeneratedLicenseNotRequired
    * RAT-9 A more informative website
    * RAT-10 A few Javadoc comments
    * RAT-23  More details in text summary
    * RAT-24 Include checksums on web page
    * RAT-26 Improve web summary
    * RAT-27 Index page
    * RAT-37 List all resources with unapproved licenses at the beginning of the report
  * New Feature
    * RAT-6 RAT Source Import
  * Task
    * RAT-28 Repackage maven plugin
  * Wish
    * RAT-1 maven-rat-plugin and ant-rat tasks

Rat 0.5.1
=========
 * Fixed file closing bug
 * Fixed XML bad character bug

Rat 0.5
=======
 * Added header matcher for DoJo.
 * Refactoring existing codebase to separate concerns and use
   resource pipeline.
 * New header matching library.

Rat 0.4.1
=========
Rat 0.4.1 is the first release with distributions. The release was cut
for this purpose.

Rat 0.4.1 Notes
===============
 * Created POM for use with Rat library.
 * Ant task switched to use Xml based report.

Rat 0.4 Notes
=============
 * Ant tasks added. These allow Rat reports to be run against a wide variety
   of resources from within Ant.
 * Legacy report is now deprecated. It will be removed before the next release.
 * Created stylesheet for xml reports which produce output similar to the legacy
   plain text report. Application now uses the xml report with that stylesheet.
 * Revised xml output format
 * Improve support for binary recognition by adding code that tastes files

Rat 0.3 Notes
=============
 * This is the last release with the original hacked together plain test report.
   The new XML reporting code is present but is not yet the default.
 * Rat 0.3 is the first release with release notes. All previous releases are
   now consigned to Ancient History. No record of them will be found here.
