  ------
  Usage
  ------
  Allan Ramirez
  ------
  July 2006
  ------

~~ Copyright 2006 The Apache Software Foundation.
~~
~~ Licensed 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Usage

  The RAR plugin is bound to the <<<package>>> phase of the build lifecycle.
  To be able to generate the RAR as part of the lifecycle, the plugin should
  be declared at the \<build\> section of the pom.

+---+
<project>
  [...]
    <build>
      <plugins>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-rar-plugin</artifactId>
        <executions>
          <execution>
            <id>test</id>
            <goals>
              <goal>rar</goal>
            </goals>
            <configuration>
              <!-- your configuration here -->
            </configuration>
        </execution>
      </plugins>
    </build>
  [...]
</project>
+---+

  then invoke the <<<package>>> phase.

+---+
mvn package
+---+

  Another way to execute the plugin is to call the <<<rar:rar>>> goal.

+---+
mvn rar:rar
+---+

  By default, the generated archive(RAR) can be located at the project's target 
  directory.

