~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~   Licensed to the Apache Software Foundation (ASF) under one or more
~~   contributor license agreements.  See the NOTICE file distributed with
~~   this work for additional information regarding copyright ownership.
~~   The ASF licenses this file to You under the Apache License, Version 2.0
~~   (the "License"); you may not use this file except in compliance with
~~   the License.  You may obtain a copy of the License at
~~
~~       http://www.apache.org/licenses/LICENSE-2.0
~~
~~   Unless required by applicable law or agreed to in writing, software
~~   distributed under the License is distributed on an "AS IS" BASIS,
~~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~   See the License for the specific language governing permissions and
~~   limitations under the License.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                        -----
                        Introduction
                        -----

Apache Rat Ant Task Library

 The Ant Task Library provides a single Ant task and a few supporting
 Ant types to run Rat, the {{{../index.html}Release Audit Tool}}, from
 inside {{{https://ant.apache.org/}Apache Ant}}.

 Using Ant's resource abstraction the task can be used to check files
 on disk as well as tarballs or even URLs directly.

Requirements

 The Rat Ant Task Library requires Apache Ant 1.7.1 or higher (it
 works well with 1.8.x), Apache Rat core and transitively all
 dependencies of Apache Rat core.

 In order to use the tasks Java 5 is required as of Rat 0.9 - Rat 0.8
 and earlier require Java 1.4.

Installation

    There are several ways to use the Antlib:

    * The traditional way:

-------
<taskdef
    resource="org/apache/rat/anttasks/antlib.xml">
    <classpath>
        <pathelement location="YOUR-PATH-TO/apache-rat-${version}.jar"/>
    </classpath>
</taskdef>
-------

      With this you can use the report task like plain Ant tasks,
      they'll live in the default namespace.  I.e. if you can run
      <<<exec>>> without any namespace prefix, you can do so for
      <<<report>>> as well.

    * Similar, but assigning a namespace URI

-------
<taskdef
    uri="antlib:org.apache.rat.anttasks"
    resource="org/apache/rat/anttasks/antlib.xml">
    <classpath>
        <pathelement location="YOUR-PATH-TO/apache-rat-${version}.jar"/>
    </classpath>
</taskdef>
-------

      This puts your task into a separate namespace than Ant's
      namespace.  You would use the tasks like

-------
<project
    xmlns:rat="antlib:org.apache.rat.anttasks"
    xmlns="antlib:org.apache.tools.ant">
    ...
    <rat:report>
        <fileset dir="src"/>
    </rat:report>
-------

      or a variation thereof.

    * Using Ant's autodiscovery.  Place <<<apache-rat-tasks.jar>>> and
      all dependencies into a directory and use <<<ant -lib
      DIR-CONTAINING-THE-JAR>>> or copy it into <<<ANT_HOME/lib>>> -
      and then in your build file, simply declare the namespace on the
      <<<project>>> tag:

-------
<project
    xmlns:rat="antlib:org.apache.rat.anttasks"
    xmlns="antlib:org.apache.tools.ant">
-------

      and all tasks of this library will automatically be available in
      the <<<rat>>> namespace without any <<<taskdef>>>.
