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

                   --------------------------
                   Command Line Support
                   --------------------------

About Apache Rat&#8482;

 Rat audits software distributions, with a special interest in headers.
 If this isn't quite what you're looking for then take a look at the
 other products developed by {{{http://creadur.apache.org}Apache Creadur}}&#8482;,
 including {{{http://creadur.apache.org/whisker}Apache Whisker}}&#8482; which audits
 and generates legal (for example <<<LICENSE>>>) documents for
 complex software distributions.

* Running from the Command Line

 Run from the command line with:

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

 This will output a help message detailing the command line
 options available to you.

* Adding license headers

 Rat can be used to automatically add license headers to
 files that do not currently have them. Only files that
 are not excluded by the Rat configurations will be affected.

 To add license headers use a command such as:

+------------------------------------------+
java -jar apache-rat-${project.version}.jar --addlicense
  --copyright "Copyright 2008 Foo" --force
  /path/to/project
+------------------------------------------+

 This command will add the license header directly to the
 source files. If you prefer to see which files will be
 changed and how then remove the "--force" option.

* Using multiple excludes from a file

  It is common to use the Rat with the Maven or Ant plugins and specify
  a series of files to exclude (such as a README or version control
  files).  If you are using the Rat application instead of a plugin you
  can specify a series of regex excludes in a file and specify that with
  the -E option.

+------------------------------------------+
java -jar apache-rat-${project.version}.jar
 -E /path/to/project/.rat-excludes
 -d /path/to/project
+------------------------------------------+

* Command Line Options


+------------------------------------------+
usage: java rat.report [options] [DIR|TARBALL]
Options
 -A,--addLicense                Add the default license header to any file
                                with an unknown license that is not in the
                                exclusion list. By default new files will
                                be created with the license header, to
                                force the modification of existing files
                                use the --force option.
 -a,--addlicense                Add the default license header to any file
                                with an unknown license that is not in the
                                exclusion list. By default new files will
                                be created with the license header, to
                                force the modification of existing files
                                use the --force option.
 -c,--copyright <arg>           The copyright message to use in the
                                license headers, usually in the form of
                                "Copyright 2008 Foo"
 -d,--dir                       Used to indicate source when using
                                --exclude
 -E,--exclude-file <fileName>   Excludes files matching regular expression
                                in <file> Note that --dir is required when
                                using this parameter.
 -e,--exclude <expression>      Excludes files matching wildcard
                                <expression>. Note that --dir is required
                                when using this parameter. Allows multiple
                                arguments.
 -f,--force                     Forces any changes in files to be written
                                directly to the source files (i.e. new
                                files are not created)
 -h,--help                      Print help for the Rat command line
                                interface and exit
 -s,--stylesheet <arg>          XSLT stylesheet to use when creating the
                                report.  Not compatible with -x
 -x,--xml                       Output the report in raw XML format.  Not
                                compatible with -s
+------------------------------------------+