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

 ------
 Usage
 ------

Usage

  To use the plugin, you've got two options: First of all, it can
  create a simple text file, called <<<target/rat.txt>>>, with the
  plugins output. This is done by invoking the <<<apache-rat:check>>> goal.

  You may also add a report to the generated site. This is your
  second option.

*Writing the report to a text file

  To create a text file with the report, you need to run the
  <<<apache-rat:check>>> goal. Add a section like the following to your POM:

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

  Once you have done that, the plugin can be run from the command
  line by simply typing

------------------------------------------------------------------
  mvn apache-rat:check
------------------------------------------------------------------

  An example for running the plugin automatically can be found
  {{{./examples/verify.html}here}}.

*Adding the report to the generated site

  A section like the following must be added to your POM:

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

  The report will be created automatically when you generate the
  site:

------------------------------------------------------------------
  mvn site
------------------------------------------------------------------
