README file for Apache Creadur RAT
==================================

The jar in this archive can be used both:
 * stand-alone (CLI)
 * with Ant as an Ant task

Stand-alone (CLI) usage
=======================

java -jar apache-rat-${project.version}.jar --help

For more details, please see the file README-CLI.txt or the website:

https://creadur.apache.org/rat/apache-rat/index.html

Apache Rat Ant Task Library
===========================

It can also be used in conjunction with Ant:

ant -lib apache-rat-${project.version}.jar ...

For more details, please see the file README-ANT.txt or the website:

https://creadur.apache.org/rat/apache-rat-tasks/index.html