 ------
 Usage
 ------
 Vincent Siveton
 ------
 2008-02-01
 ------

~~ 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 taglets can be used directly in the {{{/plugins/maven-javadoc-plugin/}Maven Javadoc Plugin}}.

+-----+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.6</version>
        <configuration>

          <!-- To allow Javadoc Tool to generate annotation for Mojo fields -->
          <show>private</show>

          <tagletArtifacts>
            <tagletArtifact>
              <groupId>org.apache.maven.plugin-tools</groupId>
              <artifactId>maven-plugin-tools-javadoc</artifactId>
              <version>${project.version}</version>
            </tagletArtifact>
          </tagletArtifacts>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </reporting>
  ...
</project>
+-----+

 <<Note>>: Several taglets are similar to simple Javadoc
 {{{http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/javadoc.html#tag}-tag}} options, i.e.:

*--------------------------------------------+---------------------------------+
|| Taglet Class                              || Javadoc -tag option
*--------------------------------------------+---------------------------------+
| MojoAggregatorTypeTaglet                   | -tag 'aggregator:t:Aggregates the Maven project and its child modules.'
*--------------------------------------------+---------------------------------+
| MojoComponentFieldTaglet                   | none
*--------------------------------------------+---------------------------------+
| MojoConfiguratorTypeTaglet                 | -tag 'configurator:t:Is configured to the role hint:'
*--------------------------------------------+---------------------------------+
| MojoExecuteTypeTaglet                      | none
*--------------------------------------------+---------------------------------+
| MojoExecutionStrategyTypeTaglet            | -tag 'executionStrategy:t:Is executed with the strategy:'
*--------------------------------------------+---------------------------------+
| MojoGoalTypeTaglet                         | -tag 'goal:t:This Mojo is defined by the goal name:'
*--------------------------------------------+---------------------------------+
| MojoInheritByDefaultTypeTaglet             | -tag 'inheritByDefault:t:Is this Mojo inherited'
*--------------------------------------------+---------------------------------+
| MojoInstantiationStrategyTypeTaglet        | -tag 'instantiationStrategy:t:Is instantiated with the strategy:'
*--------------------------------------------+---------------------------------+
| MojoParameterFieldTaglet                   | none
*--------------------------------------------+---------------------------------+
| MojoPhaseTypeTaglet                        | -tag 'phase:t:Is binded to the specified phase of the standard build lifecycle:'
*--------------------------------------------+---------------------------------+
| MojoReadOnlyFieldTaglet                    | -tag 'readonly:f:Is readonly.'
*--------------------------------------------+---------------------------------+
| MojoRequiredFieldTaglet                    | -tag 'required:f:Is required.'
*--------------------------------------------+---------------------------------+
| MojoRequiresDependencyResolutionTypeTaglet | -tag 'requiresDependencyResolution:t:Requires the dependencies in this specified scope:'
*--------------------------------------------+---------------------------------+
| MojoRequiresDirectInvocationTypeTaglet     | -tag 'requiresDirectInvocation:t:Requires a direct invocation by the user'
*--------------------------------------------+---------------------------------+
| MojoRequiresOnLineTypeTaglet               | -tag 'requiresProject:t:Requires to be online to run'
*--------------------------------------------+---------------------------------+
| MojoRequiresProjectTypeTaglet              | -tag 'requiresProject:t:Requires a Maven project to run'
*--------------------------------------------+---------------------------------+
| MojoRequiresReportsTypeTaglet              | -tag 'requiresReports:t:Requires Maven reports to run'
*--------------------------------------------+---------------------------------+

* Resources

 * {{{./apidocs/index.html}API}}

 * {{{/developers/mojo-api-specification.html#The_Descriptor_and_Annotations}Mojo API Specification}}

 []
