blob: 38bc1f917e1dbc1bd9da6dd87e0497d0e2bd6511 [file] [log] [blame]
<!--
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.
-->
<model xmlns="http://codehaus-plexus.github.io/MODELLO/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/2.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-2.0.0.xsd"
xml.namespace="http://maven.apache.org/PLUGIN/${version}"
xml.schemaLocation="https://maven.apache.org/xsd/plugin-${version}.xsd">
<id>plugin</id>
<name>PluginDescriptor</name>
<description><![CDATA[
Maven 4 Plugin descriptor, stored in {@code META-INF/maven/plugin.xml} in a plugin's jar artifact.
This descriptor is generally using the information contained in the annotations of the plugin api.
<p>An XSD is available at <a href="https://maven.apache.org/xsd/plugin-2.0.0.xsd">https://maven.apache.org/xsd/plugin-2.0.0.xsd</a></p>
]]></description>
<classes>
<class rootElement="true" xml.tagName="plugin" xdoc.anchorName="plugin">
<name>PluginDescriptor</name>
<version>1.0.0+</version>
<description>Root element of the {@code plugin.xml} file.</description>
<fields>
<field>
<name>name</name>
<version>1.0.0+</version>
<description>Name of the plugin.</description>
<type>String</type>
</field>
<field>
<name>description</name>
<version>1.0.0+</version>
<description>Description of the plugin.</description>
<type>String</type>
</field>
<field>
<name>groupId</name>
<version>1.0.0+</version>
<description>The group id of the plugin.</description>
<type>String</type>
<required>true</required>
</field>
<field>
<name>artifactId</name>
<version>1.0.0+</version>
<description>The artifact id of the plugin.</description>
<type>String</type>
</field>
<field>
<name>version</name>
<version>1.0.0+</version>
<description>The version of the plugin.</description>
<type>String</type>
<required>true</required>
</field>
<field>
<name>goalPrefix</name>
<version>1.0.0+</version>
<description></description>
<type>String</type>
</field>
<field>
<name>isolatedRealm</name>
<version>1.0.0+</version>
<description></description>
<type>boolean</type>
<defaultValue>false</defaultValue>
</field>
<field>
<name>inheritedByDefault</name>
<version>1.0.0+</version>
<description></description>
<type>boolean</type>
<defaultValue>true</defaultValue>
</field>
<field>
<name>requiredJavaVersion</name>
<version>1.1.0+</version>
<description>
A version range which specifies the supported Java versions. A version range can either use the usual mathematical syntax "[2.0.10,2.1.0),[3.0,)" or use a single version "2.2.1". The latter is a short form for "[2.2.1,)", i.e. denotes the minimum version required.
@since Maven 4.0.0-alpha-3
</description>
<type>String</type>
</field>
<field>
<name>requiredMavenVersion</name>
<version>1.1.0+</version>
<description>
A version range which specifies the supported Maven versions. A version range can either use the usual mathematical syntax "[2.0.10,2.1.0),[3.0,)" or use a single version "2.2.1". The latter is a short form for "[2.2.1,)", i.e. denotes the minimum version required. This value takes precedence over the POMs Maven prerequisite.
@since Maven 4.0.0-alpha-3
</description>
<type>String</type>
</field>
<field xdoc.separator="blank">
<name>mojos</name>
<version>1.0.0+</version>
<association>
<type>MojoDescriptor</type>
<multiplicity>*</multiplicity>
</association>
<description>Description of each Mojo provided by the plugin.</description>
</field>
<field xdoc.separator="blank">
<name>dependencies</name>
<version>1.0.0/1.1.0</version>
<association>
<type>Dependency</type>
<multiplicity>*</multiplicity>
</association>
<description>
A set of dependencies which the plugin requires in order to function. This enables the plugin to function
independently of its POM (or at least to declare the libraries it needs to run).
</description>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>2.0.0+</version>
<code><![CDATA[
public String getPluginLookupKey() {
return groupId + ":" + artifactId;
}
public String getId() {
return groupId + ":" + artifactId + ":" + version;
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class xdoc.anchorName="mojo">
<name>MojoDescriptor</name>
<version>1.0.0+</version>
<description>A Mojo description.</description>
<fields>
<field>
<name>goal</name>
<required>true</required>
<version>1.0.0+</version>
<type>String</type>
<description>
The goal name for the Mojo, that users will reference from the command line to execute the Mojo directly,
or inside a POM in order to provide Mojo-specific configuration.
</description>
</field>
<field>
<name>description</name>
<version>1.0.0+</version>
<type>String</type>
<description>The description of this Mojo's functionality.</description>
</field>
<field>
<name>implementation</name>
<version>1.0.0+</version>
<type>String</type>
<description>
The Mojo's fully-qualified class name (or script path in the case of non-Java Mojos).
</description>
</field>
<field>
<name>language</name>
<version>1.0.0+</version>
<type>String</type>
<defaultValue>java</defaultValue>
<description>The implementation language for this Mojo (java, beanshell, etc.).</description>
</field>
<field>
<name>phase</name>
<version>1.0.0+</version>
<type>String</type>
<description>
Defines a default phase to bind a Mojo execution to if the user does not explicitly set a phase in the POM.
&lt;p>&lt;b>Note:&lt;/b> This will not automagically make a Mojo run when the plugin declaration is added
to the POM. It merely enables the user to omit the {@code &lt;phase&gt;} element from the
surrounding {@code &lt;execution&gt;} element.&lt;/p>
</description>
</field>
<field>
<name>executePhase</name>
<version>1.0.0+</version>
<type>String</type>
<description>Reference the invocation phase of the Mojo.</description>
</field>
<field>
<name>executeGoal</name>
<version>1.0.0+</version>
<type>String</type>
<description>Reference the invocation goal of the Mojo.</description>
</field>
<field>
<name>executeLifecycle</name>
<version>1.0.0+</version>
<type>String</type>
<description></description>
</field>
<field>
<name>requiresDependencyResolution</name>
<version>1.0.0/1.1.0</version>
<type>String</type>
<defaultValue>runtime</defaultValue>
<description>
Flags this Mojo as requiring the dependencies in the specified class path to be resolved before it can
execute: {@code compile}, {@code runtime}, {@code test},
{@code compile+runtime} (since Maven 3.0) or {@code runtime+system} (since Maven 3.0)
</description>
</field>
<field>
<name>dependencyResolution</name>
<version>2.0.0+</version>
<type>String</type>
<defaultValue>runtime</defaultValue>
<description>
Flags this Mojo as requiring the dependencies in the specified class path to be resolved before it can
execute: {@code compile}, {@code runtime}, {@code test},
{@code compile+runtime} (since Maven 3.0) or {@code runtime+system} (since Maven 3.0)
</description>
</field>
<field>
<name>requiresDependencyCollection</name>
<version>1.0.0/1.1.0</version>
<type>String</type>
<description>
Flags this Mojo as requiring information about the dependencies that would make up the specified class
path. As the name suggests, this is similar to requiresDependencyResolution and supports the same values.
The important difference is this will not resolve the files for the dependencies, i.e. the artifacts
associated with a Maven project can lack a file. As such, this annotation is meant for Mojos that only
want to analyze the set of transitive dependencies, in particular during early lifecycle phases where
full dependency resolution might fail due to projects which haven't been built yet.
</description>
</field>
<field>
<name>dependencyCollection</name>
<version>2.0.0+</version>
<type>String</type>
<description>
Flags this Mojo as requiring information about the dependencies that would make up the specified class
path. As the name suggests, this is similar to requiresDependencyResolution and supports the same values.
The important difference is this will not resolve the files for the dependencies, i.e. the artifacts
associated with a Maven project can lack a file. As such, this annotation is meant for Mojos that only
want to analyze the set of transitive dependencies, in particular during early lifecycle phases where
full dependency resolution might fail due to projects which haven't been built yet.
</description>
</field>
<field>
<name>requiresDirectInvocation</name>
<version>1.0.0/1.1.0</version>
<type>boolean</type>
<description>Flags this Mojo to be invoked directly only.</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>directInvocationOnly</name>
<version>2.0.0+</version>
<type>boolean</type>
<description>Flags this Mojo to be invoked directly only.</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>requiresProject</name>
<version>1.0.0/1.1.0</version>
<type>boolean</type>
<description>Flags this Mojo to require running inside of a project.</description>
<defaultValue>true</defaultValue>
</field>
<field>
<name>projectRequired</name>
<version>2.0.0+</version>
<type>boolean</type>
<description>Flags this Mojo to require running inside of a project.</description>
<defaultValue>true</defaultValue>
</field>
<field>
<name>requiresReports</name>
<version>1.0.0</version><!-- no longer part of 1.1.0 -->
<type>boolean</type>
<description>Flags this Mojo to require running inside of a reports context. Unsupported since Maven 3.0.</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>requiresOnline</name>
<version>1.0.0/1.1.0</version>
<type>boolean</type>
<description>Flags this Mojo to require online mode for its operation.</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>onlineRequired</name>
<version>2.0.0+</version>
<type>boolean</type>
<description>Flags this Mojo to require online mode for its operation.</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>aggregator</name>
<version>1.0.0+</version>
<type>boolean</type>
<description>
Flags this Mojo to run it in a multi-module way, i.e. aggregate the build with the set of projects
listed as modules.
</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>inheritedByDefault</name>
<version>1.0.0+</version>
<type>boolean</type>
<description>Specify that the Mojo is inherited.</description>
<defaultValue>true</defaultValue>
</field>
<field>
<name>threadSafe</name>
<version>1.0.0/1.1.0</version>
<type>boolean</type>
<description>
Marks this Mojo as being thread-safe, i.e. the Mojo safely supports concurrent execution during parallel
builds. Mojos without this annotation will make Maven output a warning when used during a parallel build
session.
@since Maven 3.0.
</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>v4Api</name>
<version>1.1.0</version>
<type>boolean</type>
<description>Marks this Mojo as using Maven 4 API. This makes the plugin implicitly incompatible with earlier Maven versions. Only evaluated since Maven 4.</description>
<defaultValue>false</defaultValue>
</field>
<field>
<name>instantiationStrategy</name>
<version>1.0.0/1.1.0</version>
<type>String</type>
<defaultValue>per-lookup</defaultValue>
<description>Specify the instantiation strategy.</description>
</field>
<field>
<name>executionStrategy</name>
<version>1.0.0/1.1.0</version>
<type>String</type>
<description>
Specify the execution strategy: {@code once-per-session}, {@code always}.
</description>
<defaultValue>once-per-session</defaultValue>
</field>
<field>
<name>since</name>
<version>1.0.0+</version>
<type>String</type>
<description>Specify the version when the Mojo was added to the API. Similar to Javadoc since.</description>
</field>
<field>
<name>deprecated</name>
<version>1.0.0+</version>
<type>String</type>
<description>
Description with the reason of Mojo deprecation. Similar to Javadoc {@code @deprecated}
This will trigger a warning when a user tries to use a Mojo marked as deprecated.
</description>
</field>
<field>
<name>configurator</name>
<version>1.0.0+</version>
<type>String</type>
<description>
The configurator type to use when injecting parameter values into this Mojo. The value is normally deduced
from the Mojo's implementation language, but can be specified to allow a custom ComponentConfigurator
implementation to be used.
</description>
</field>
<field>
<name>composer</name>
<version>1.0.0/1.1.0</version>
<type>String</type>
<description></description>
</field>
<field xdoc.separator="blank">
<name>parameters</name>
<version>1.0.0+</version>
<description></description>
<association>
<type>Parameter</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field xdoc.separator="blank">
<name>requirements</name>
<version>1.0.0/1.1.0</version>
<description></description>
<association>
<type>Requirement</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field xml.format="((PluginDescriptor.Builder) context.peekLast()).build().getId() + &quot;:&quot; + mojoDescriptor.build().getGoal()">
<name>id</name>
<version>2.0.0+</version>
<type>String</type>
<description>the id of the mojo, based on the goal name</description>
</field>
<field xml.format="((PluginDescriptor.Builder) context.peekLast()).build().getGoalPrefix() + &quot;:&quot; + mojoDescriptor.build().getGoal()">
<name>fullGoalName</name>
<version>2.0.0+</version>
<type>String</type>
<description>the full goal name</description>
</field>
</fields>
</class>
<class xdoc.anchorName="parameter">
<name>Parameter</name>
<version>1.0.0+</version>
<description>A phase mapping definition.</description>
<!-- see o.a.m.plugin.descriptor.Parameter -->
<fields>
<field>
<name>name</name>
<version>1.0.0+</version>
<type>String</type>
<required>true</required>
<description>
The name of the parameter, to be used while configuring this parameter from the Mojo's declared defaults
or from the POM.
</description>
</field>
<field>
<name>alias</name>
<version>1.0.0+</version>
<type>String</type>
<description>
Specifies an alias which can be used to configure this parameter from the POM.
This is primarily useful to improve user-friendliness, where Mojo field names are not intuitive to the
user or are otherwise not conducive to configuration via the POM.
</description>
</field>
<field>
<name>type</name>
<version>1.0.0+</version>
<type>String</type>
<required>true</required>
<description>
The Java type for this parameter. This is used to validate the result of any expressions used to calculate
the value which should be injected into the Mojo for this parameter.
</description>
</field>
<field>
<name>required</name>
<version>1.0.0+</version>
<type>boolean</type>
<description>
Whether this parameter is required for the Mojo to function. This is used to validate the configuration
for a Mojo before it is injected, and before the Mojo is executed from some half-state.
</description>
</field>
<field>
<name>editable</name>
<version>1.0.0+</version>
<type>boolean</type>
<defaultValue>true</defaultValue>
<description>
Specifies that this parameter can be configured directly by the user (as in the case of POM-specified
configuration). This is useful when you want to force the user to use common POM elements rather than
plugin configurations, as in the case where you want to use the artifact's final name as a parameter. In
this case, you want the user to modify {@code &lt;build&gt;&lt;finalName/&gt;&lt;/build&gt;} rather
than specifying a value for finalName directly in the plugin configuration section. It is also useful to
ensure that - for example - a List-typed parameter which expects items of type Artifact doesn't get a List
full of Strings.
</description>
</field>
<field>
<name>description</name>
<version>1.0.0+</version>
<type>String</type>
<description>The description of this parameter's use inside the Mojo.</description>
</field>
<field>
<name>since</name>
<version>1.0.0+</version>
<type>String</type>
<description>Specify the version when the parameter was added to the API. Similar to Javadoc since.</description>
</field>
<field>
<name>deprecated</name>
<version>1.0.0+</version>
<type>String</type>
<description>
Description with the reason of parameter deprecation. Similar to Javadoc {@code @deprecated}.
This will trigger a warning when a user tries to configure a parameter marked as deprecated.
</description>
</field>
<field>
<name>expression</name>
<version>2.0.0+</version>
<type>String</type>
<description>Parameter expression, to let user override default value with a user property, system property or project property.</description>
</field>
<field>
<name>defaultValue</name>
<version>2.0.0+</version>
<type>String</type>
<description>The default value, as an expression that will be evaluated at injection or run-time.</description>
</field>
</fields>
</class>
<class xdoc.anchorName="requirement">
<name>Requirement</name>
<version>1.0.0/1.1.0</version>
<description>Describes a component requirement.</description>
<!-- see o.a.m.plugin.descriptor.Requirement -->
<fields>
<field>
<name>role</name>
<required>true</required>
<version>1.0.0+</version>
<type>String</type>
<description></description>
</field>
<field xml.tagName="role-hint">
<name>roleHint</name>
<version>1.0.0+</version>
<type>String</type>
<description></description>
</field>
<field xml.tagName="field-name">
<name>fieldName</name>
<required>true</required>
<version>1.0.0+</version>
<type>String</type>
<description>The field name which has this requirement.</description>
</field>
</fields>
</class>
<class xdoc.anchorName="dependency">
<name>Dependency</name>
<version>1.0.0/1.1.0</version>
<description>Definition of a dependency, needed by the plugin at runtime.</description>
<fields>
<field>
<name>groupId</name>
<required>true</required>
<version>1.0.0+</version>
<type>String</type>
<description>The group id of the dependency.</description>
</field>
<field>
<name>artifactId</name>
<required>true</required>
<version>1.0.0+</version>
<type>String</type>
<description>The artifact id of the dependency.</description>
</field>
<field>
<name>version</name>
<version>1.0.0+</version>
<type>String</type>
<description>The version of the dependency.</description>
</field>
<field>
<name>type</name>
<version>1.0.0+</version>
<type>String</type>
<defaultValue>jar</defaultValue>
<description>The type of dependency.</description>
</field>
</fields>
</class>
</classes>
</model>