<?xml version="1.0" encoding="UTF-8"?>
<!-- 
/*
 * Copyright 2001-2004 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.
 */
 -->


<document>
  <properties>
    <title>AspectWerkz properties</title>
    <author email="vmassol@apache.org">Vincent Massol</author>
  </properties>
  <body>

    <section name="Weaving aspect libraries">
      <p>
        It is possible to specify aspect libraries that will be weaved to the
        main source code. For example:
      </p>
<source><![CDATA[
  <dependency>
    <groupId>groupId</groupId>
    <artifactId>artifactId</artifactId>
    <version>version</version>
    <type>jar|zip</type>
    <properties>
      <aspectwerkz.library>true</aspectwerkz.library>
    </properties>
  </dependency>
]]></source>     
    </section>   

    <section name="AspectWerkz generic properties">
      <table>
        <tr>
          <th>Property</th>
          <th>Optional?</th>
          <th>Description</th>
        </tr>
        <tr>
          <td>maven.aspectwerkz.mode</td>
          <td>Yes</td>
          <td>
            AW supports 2 types of Aspects/Advice/Pointcuts definition: 
            <ul>
              <li>
                <strong>xmldef</strong>: Advice are defined as extending 
                *Advice classes (BeforeAdvice, AroundAdvice, etc). Custom 
                javadoc attributes can be used to link code to weave with 
                advices.
              </li>
              <li>
                <strong>attribdef</strong>: Advices and pcds are defined 
                purely using custom javadoc attributes (@Execute, @Aspect,
                etc).
              </li>
            </ul>
            You need to tell the plugin how you have defined your AW 
            Aspects/Advices/Pointcuts. The 2 valid values are 
            <code>xmldef</code> and <code>attribdef</code>.
            The default value is <code>attribdef</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.weave.build.dir</td>
          <td>Yes</td>
          <td>
            Location where weaved classes will be generated. Default to
            <code>${maven.build.dest}</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.definition.validate</td>
          <td>Yes</td>
          <td>
            Decide whether definition validation is turned on or off.
            Defaults to <code>false</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.verbose</td>
          <td>Yes</td>
          <td>
            Decide whether to use verbose output or not during execution of
            this plugin's goals. Defaults to <code>false</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.src.dir</td>
          <td>Yes</td>
          <td>
            Location of non-production aspect source files.
            The AW plugin looks for source files in 
            <code>${pom.sourceDirectory}</code>. It also supports all source 
            directories added to the <code>${maven.compile.src.set}</code>
            Ant path variable. Moreover, if you wish to keep non-production 
            aspects in a specific directory, you can define the
            <code>maven.aspectwerkz.src.dir</code> property. Defaults to
            <code>maven.aspectwerkz.src.dir = ${basedir}/src/aspectwerkz</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.build.dest</td>
          <td>Yes</td>
          <td>
            Location where non-production aspect classes will be compiled to.
            These are the classes defined by 
            <code>${maven.aspectwerkz.src.dir}</code>. Defaults to
            <code>maven.aspectwerkz.build.dest = ${maven.build.dir}/aspectwerkz/classes</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.classloader.preprocessor</td>
          <td>Yes</td>
          <td>
            Classloader to use for class files weaving. Defaults to
            <code>org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor</code>.
          </td>
        </tr>
      </table>
    </section>

    <section name="AspectWerkz properties specific to 'attribdef' mode">
      <table>
        <tr>
          <th>Property</th>
          <th>Optional?</th>
          <th>Description</th>
        </tr>
        <tr>
          <td>maven.aspectwerkz.definition.file.src</td>
          <td>Yes</td>
          <td>
            Location of the XML definition file. Default to
            <code>${basedir}/conf/aspectwerkz.xml</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.aspectc.build.dir</td>
          <td>Yes</td>
          <td>
            Location where aspectc results will be generated. Defaults to
            <code>${maven.build.dir}/aspectwerkz/aspectc</code>.
          </td>
        </tr>
      </table>
    </section>

    <section name="AspectWerkz properties specific to 'xmldef' mode">
      <table>
        <tr>
          <th>Property</th>
          <th>Optional?</th>
          <th>Description</th>
        </tr>
        <tr>
          <td>maven.aspectwerkz.definition.file.build</td>
          <td>Yes</td>
          <td>
            Location of the AW XML definition file that will be created by the
            attribute compilation (when calling the 
            <code>aspectwerkz:attributec</code> goal). This is only used in 
            <code>xmldef</code> mode. Defaults to
            <code>${maven.build.dir}/aspectwerkz.xml</code>.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.definition.file.merge</td>
          <td>Yes</td>
          <td>
            Definition file to be merged with the main definition file.
            This property is not defined by default.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.uuid</td>
          <td>Yes</td>
          <td>
            UUID to use. If not specified a default one will be 
            automatically generated. This property is not defined by default.
          </td>
        </tr>
        <tr>
          <td>maven.aspectwerkz.transform.filter</td>
          <td>Yes</td>
          <td>
            If set to "no", prevents <code>org.codehaus.aspectwerkz</code> and
            related classes (jexl, trove, dom4j...) from being instrumented.
            Defaults to <code>no</code>.
          </td>
        </tr>
      </table>
    </section>      
  </body>
</document>