blob: ef81c29c5641a3e20747e162f37f4beb43c8af71 [file] [log] [blame]
------
Using Plugin Tools Java5 Annotations
------
Olivier Lamy
------
2012-05-14
------
~~ 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:
~~ https://maven.apache.org/doxia/references/apt-format.html
Using Plugin Tools Java Annotations
You can use Java annotations to generate the plugin descriptor file.
<<NOTE>> With annotations, your Mojo super class does not have to be in the same project: provided that the superclass also uses annotations, it
can now come from reactor projects or external dependencies. By default all dependencies are scanned, but this can be reduced with the <<<mojoDependencies>>>
parameter. BUT as javadoc doclets are still useful for goals and parameters description, <<<@since>>> and <<<@deprecated>>>, the sources are still scanned. So if you use an external
dependency, you must still provide an artifact with sources (<<<sources>>> classifier) to provide documentation (the tooling will skip error if this artifact
sources is missing).
* Annotations
Information for plugin descriptor generation is specified using 4 annotations:
* 2 class level annotations:
* <<<@Mojo>>>: This annotation will mark your class as a Mojo,
* <<<@Execute>>>: Used if your Mojo needs to fork a lifecycle,
[]
* 1 field or method level annotations:
* <<<@Parameter>>>: Used to configure your Mojo parameters,
[]
* 1 field level annotations:
* <<<@Component>>>: Used to configure injection of Plexus components or Maven context components.
[]
[]
For more information on these annotations, see the
{{{../../maven-plugin-tools-annotations/index.html#Supported_Annotations}corresponding documentation}}.
Notice that Plugin Tools Java Annotations are named after Plugin Tools Javadoc Tags
with following little differences:
*-------------------------------+---------------+
|| {{{../../maven-plugin-tools-java/index.html}Plugin Tools Javadoc Tags}} || {{{../../maven-plugin-tools-annotations/index.html}Plugin Tools Java Annotation}} ||
*-------------------------------+---------------+
| <<<@goal "goal-name">>> | <<<@Mojo( name = "goal-name" )>>>
*-------------------------------+---------------+
| <<<@phase "\<phase-name\>">>> | <<<@Mojo( defaultPhase = LifecyclePhase.\<phase\> )>>>
*-------------------------------+---------------+
* POM configuration
To use these Java annotations, add a dependency on
<<<maven-plugin-annotations>>> to your pom, preferably with <<<provided>>> scope.
+-----+
<project>
...
<packaging>maven-plugin</packaging>
...
<dependencies>
<!-- dependencies to annotations -->
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>${project.version}</version>
<scope>provided</scope> <!-- annotations are not used at runtime because @Retention(value=CLASS), they are needed only to build the plugin -->
</dependency>
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>${project.version}</version>
<executions>
<!-- if you want to generate help goal -->
<execution>
<id>help-goal</id>
<goals>
<goal>helpmojo</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
...
</project>
+-----+