~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~   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.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                   --------------------------
                   A Release Audit Tool
                   --------------------------

Apache Rat

 In a hurry? Jump to {{{Quick_Start:_Running_Rat}quick start}}

%{toc|fromDepth=2|toDepth=3}

* About Rat

** What Is Rat?

 Apache Rat is a release audit tool, focused on licenses.

** Rat Is Used To...?

 Use Rat to improve accuracy and efficiency
 when checking releases for licenses.

** Why Develop Rat?

 Reviewing releases in the {{{http://incubator.apache.org/}Apache Incubator}}
 by hand was error-prone and time-consuming.

 Rat arises from the Apache style, but is used more widely.
 If your release style isn't supported,
 {{{./mail-lists.html}talk to us}}.

** How Do I Use Rat?

 Apache Rat ${project.version} ships with tooling for

   * {{{https://ant.apache.org/} Apache Ant}},

   * {{{https://maven.apache.org}Apache Maven}} and

   * the command line.

 Rat is extensible. If your build tool isn't supported, please contribute a
 {{{./issue-tracking.html}patch}} or
 {{{./mail-lists.html}talk to us}}.

 Rat aspires to be self documenting. Please contribute a
 {{{./issue-tracking.html}patch}} or
 {{{./mail-lists.html}talk to us}}
 whenever Rat falls short.

** Who Develops Rat?

  Apache Rat is part of the {{{https://creadur.apache.org}Apache Creadur}}
  language- and build-agnostic suite of tools for auditing and comprehending
  software distributions. Our community develops
  {{{http://www.opensource.org/} open source software}} the
  {{{https://www.apache.org/foundation/how-it-works.html} Apache way}}.

  Please feel free to contribute a
  {{{./issue-tracking.html}patch}},
  {{{http://c2.com/cgi/wiki?TestDrivenDevelopment}demonstrate}} a
  {{{./issue-tracking.html}bug}}, or
  just
  {{{./mail-lists.html}talk to us}}.
  All welcome :-)

* Quick Start: Running Rat

** Command Line

 Quick start by

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

 Read more {{{./apache-rat/index.html}here}}.

** Apache Ant

 Use the task library for {{{https://ant.apache.org/} Apache Ant 1.7}} or later

 Read more {{{./apache-rat-tasks/index.html} here}}.

** Apache Maven

 Use the plugin for {{{https://maven.apache.org}Apache Maven ${mavenVersion}}} or later.

+------------------------------------------+
  <plugin>
    <groupId>org.apache.rat</groupId>
    <artifactId>apache-rat-plugin</artifactId>
    <version>${project.version}</version>
  </plugin>
+------------------------------------------+

 Read more {{{./apache-rat-plugin/index.html} here}}.

* Checking Out Rat

  Quick start

+------------------------------------------+
svn co http://svn.apache.org/repos/asf/creadur/rat/trunk/
+------------------------------------------+

 Read more {{{./source-repository.html}here}}.

* Building Rat

 Build Rat with {{{https://maven.apache.org/} Apache Maven}}

 Quick start

 If you want to build RAT just launch 'mvn' inside the root folder. It will automatically perform a 

+------------------------------------------+
mvn clean install
+------------------------------------------+

