 ------
 Usage
 ------
 Stephane Nicoll
 <snicoll@apache.org>
 ------
 2011-03-26
 ------

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

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


Usage

 The ACR Plugin is used to package a JavaEE Application Client module. There are two ways to use the ACR Plugin:

 * If the packaging type defined in the <<<pom.xml>>> is <<<app-client>>>, the <<<package>>> lifecycle phase can be used

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

  Pay attention that prior to Maven 3.0.4, the plugin's extension must be enabled since the <<<app-client>>>
  packaging type is new.

+-------+
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-acr-plugin</artifactId>
        <version>${project.version}</version>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
+-------+

 * or using the <<<acr:acr>>> goal

+--------------+
  mvn acr:acr
+--------------+
