Configuration

  All Aar plugin goals takes the following configuration parameters as input:

*------------------+----------------------------------+------------------------------------------------+
| Parameter name   | Default value                    | Description                                    |
*------------------+----------------------------------+------------------------------------------------+
| aarDirectory     | ${project.build.directory}/aar   | Directory where the aar file is built.         |
*------------------+----------------------------------+------------------------------------------------+
| classesDirectory | ${project.build.outputDirectory} | Directory with compiled classes and resources. |
*------------------+----------------------------------+------------------------------------------------+
| fileSets         |                                  | Additional file sets, which are being added to |
|                  |                                  | the archive. See "File Sets" below for an      |
|                  |                                  | example.                                       |
*------------------+----------------------------------+------------------------------------------------+
| servicesXmlFile  |                                  | 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.                        |
*------------------+----------------------------------+------------------------------------------------+
| wsdlFile         |                                  | 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.                        |
*------------------+----------------------------------+------------------------------------------------+
| wsdlFileName     | service.wsdl                     | Name, to which the WSDL file should be mapped. |
*------------------+----------------------------------+------------------------------------------------+


The aar goal

  The aar goal allows the following additional parameters:

*------------------+----------------------------+------------------------------------------------+
| Parameter name   | Default value              | Description                                    |
*------------------+----------------------------+------------------------------------------------+
| outputDirectory  | ${project.build.directory} | Directory where to generate the AAR file.      |
*------------------+----------------------------+------------------------------------------------+
| aarName          | ${project.build.finalName} | The generated AAR files name.                  |
*------------------+----------------------------+------------------------------------------------+
| archive          |                            | A Maven archive configuration. This allows,    |
|                  |                            | for example, to configure the MANIFEST.MF      |
|                  |                            | file.                                          |
*------------------+----------------------------+------------------------------------------------+
| classifier       |                            | 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.              |
*------------------+----------------------------+------------------------------------------------+
| primaryArtifact  | true                       | Setting this property to false disables        |
|                  |                            | installation or deployment of the artifact as  |
|                  |                            | the projects primary artifact.                 |
*------------------+----------------------------+------------------------------------------------+


File Sets

  Additional file sets may be configured for inclusion into the AAR file. A file set looks
  as follows:

-----------------
  <fileSets>
    <fileSet>
      <directory>src/aar/files</directory>
      <outputDirectory>META-INF/docs</outputDirectory>
      <includes>
        <include>**/*.html</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>src/aar/files</directory>
      <outputDirectory>META-INF/etc</outputDirectory>
      <excludes>
        <exclude>**/*.html</exclude>
      </excludes>
    </fileSet>
  </fileSets>
-----------------

  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.

  A file set is configured through the following configuration parameters:

*---------------------+-------------------------------------------------------------------+
| Parameter name      | Description                                                       |
*---------------------+-------------------------------------------------------------------+
| directory           | The directory, from which to read the file set. This parameter is |
|                     | required.                                                         |
*---------------------+-------------------------------------------------------------------+
| outputDirectory     | The target directory within the AAR file. Defaults to the AAR     |
|                     | files root directory.                                             |
*---------------------+-------------------------------------------------------------------+
| includes            | Configures the set of files, which shall be included into the AAR |
|                     | file. Defaults to **/*.                                           |
*---------------------+-------------------------------------------------------------------+
| excludes            | Configures a set of files, which shall be excluded from the file  |
|                     | set. Defaults to the Maven default excludes (**/*~, **/cvs/**/*,  |
|                     | **/.svn/**/*, etc.)                                               |
*---------------------+-------------------------------------------------------------------+
| skipDefaultExcludes | If this parameter is set to true, then no default excludes are    |
|                     | being used.                                                       |
*---------------------+-------------------------------------------------------------------+
