<!--
  ~ 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.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<meta http-equiv="content-type" content="" />
<title>Maven2 AAR Plug-in Guide</title>
</head>
<body>
<h1>Maven2 AAR Plug-in Guide</h1>
<h2>Introduction</h2>
<p>This plugin generates an Axis 2 service file (AAR file).</p>
<p><a href="../index.html">[Download Plugin Tool]</a></p>
<h2>Goals</h2>
<p>The AAR plugin allows the packaging of an Axis 2 service aar in
3 different modes:</p>
<ol>
<li><b>axis2-aar:aar</b>: generates the aar artifact</li>
<li><b>axis2-aar:inplace</b> : package the aar in the source tree</li>
<li><b>axis2-aar:exploded</b> : package an exploded aar application</li>
</ol>
<p>Each mode is materialized by a goal. For instance, to generate
an exploded aar from the current project, one would type</p>
<pre>
mvn axis2-aar:exploded
</pre>
<h2>Configuration</h2>
<p>All AAR plugin goals takes the following configuration
parameters as input:</p>
<table>
<tbody>
<tr>
<td><strong>Parameter Name</strong></td>
<td><strong>Default Value</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>aarDirectory</td>
<td>${project.build.directory}/aar</td>
<td>Directory where the aar file is built</td>
</tr>
<tr>
<td>classesDirectory</td>
<td>${project.build.outputDirectory}</td>
<td>Directory with compiled classes and resources</td>
</tr>
<tr>
<td>fileSets</td>
<td></td>
<td>Additional file sets, which are being added to the archive. See
"<a href="#file_sets">File Sets</a>" below for an example</td>
</tr>
<tr>
<td>servicesXmlFile</td>
<td></td>
<td>Location of the services.xml file. By default, it is assumed
that the file is already present in classesDirectory/META-INF and
no special processing is required</td>
</tr>
<tr>
<td>wsdlFile</td>
<td></td>
<td>Location of the WSDL file. By default, it is assumed that the
file is already present in classesDirectory/META-INF and no special
processing is required</td>
</tr>
<tr>
<td>wsdlFileName</td>
<td>service.wsdl</td>
<td>Name, to which the WSDL file should be mapped</td>
</tr>
</tbody>
</table>
<h3>The aar Goal</h3>
<p>The aar goal allows the following additional parameters:</p>
<table>
<tbody>
<tr>
<td><strong>Parameter Name</strong></td>
<td><strong>Default Value</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>outputDirectory</td>
<td>${project.build.directory}</td>
<td>Directory where to generate the AAR file</td>
</tr>
<tr>
<td>aarName</td>
<td>${project.build.finalName}</td>
<td>The generated AAR files name</td>
</tr>
<tr>
<td>archive</td>
<td></td>
<td>A Maven archive configuration. This allows, for example, to
configure the MANIFEST.MF file</td>
</tr>
<tr>
<td>classifier</td>
<td></td>
<td>A classifier, which should be added to the generated AAR files
name. Setting this parameter has the side effect, that the artifact
is treated as an attachment and not as the projects primary
artifact</td>
</tr>
<tr>
<td>primaryArtifact</td>
<td>true</td>
<td>Setting this property to false disables installation or
deployment of the artifact as the projects primary artifact</td>
</tr>
</tbody>
</table>
<a name="file_sets" id="file_sets"></a>
<h3>File Sets</h3>
<p>Additional file sets may be configured for inclusion into the
AAR file. A file set looks as follows:</p>
<pre>
  
  &lt;fileSets&gt;
    &lt;fileSet&gt;
      &lt;directory&gt;src/aar/files&lt;/directory&gt;
      &lt;outputDirectory&gt;META-INF/docs&lt;/outputDirectory&gt;
      &lt;includes&gt;
        &lt;include&gt;**/*.html&lt;/include&gt;

      &lt;/includes&gt;
    &lt;/fileSet&gt;
    &lt;fileSet&gt;
      &lt;directory&gt;src/aar/files&lt;/directory&gt;
      &lt;outputDirectory&gt;META-INF/etc&lt;/outputDirectory&gt;

      &lt;excludes&gt;
        &lt;exclude&gt;**/*.html&lt;/exclude&gt;
      &lt;/excludes&gt;
    &lt;/fileSet&gt;
  &lt;/fileSets&gt;
  
</pre>
<p>The example specifies, that the contents of the directory
src/aar/files shall be added to the AAR file. HTML files will go
into META-INF/docs, all other files to META-INF/etc.</p>
<p>A file set is configured through the following configuration
parameters:</p>
<table>
<tbody>
<tr>
<td><strong>Parameter Name</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>directory</td>
<td>The directory, from which to read the file set. This parameter
is required</td>
</tr>
<tr>
<td>outputDirectory</td>
<td>The target directory within the AAR file. Defaults to the AAR
files root directory</td>
</tr>
<tr>
<td>includes</td>
<td>Configures the set of files, which shall be included into the
AAR file. Defaults to **/*</td>
</tr>
<tr>
<td>excludes</td>
<td>Configures a set of files, which shall be excluded from the
file set. Defaults to the Maven default excludes (**/*~,
**/cvs/**/*, **/.svn/**/*, etc.)</td>
</tr>
<tr>
<td>skipDefaultExcludes</td>
<td>If this parameter is set to true, then no default excludes are
being used</td>
</tr>
</tbody>
</table>
</body>
</html>
