  ------
  Exclude the project jar in the RAR
  ------
  Stephane Nicoll
  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

Exclude the project jar in the RAR

  By default, the generated JAR file is included in the RAR file. This behavior
  is controlled by the <<includeJar>> property. For instance, to exclude the generated
  JAR file from the RAR, set the <<includeJar>> property to <<false>>.

+---+
[...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-rar-plugin</artifactId>
        <configuration>
           <includeJar>false</includeJar>
        </configuration>
      </plugin>
    </plugins>
  </build>
[...]
+----+

  Then execute the plugin by invoking the <<<rar:rar>>> goal.

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