<!--
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</code> 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><![CDATA[Root element of the <code>plugin.xml</code> 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.</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.</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><![CDATA[
        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><![CDATA[
            Defines a default phase to bind a Mojo execution to if the user does not explicitly set a phase in the POM.
            <i>Note:</i> 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;</code> element from the
            surrounding <code>&lt;execution&gt;</code> element.
          ]]></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><![CDATA[
            Flags this Mojo as requiring the dependencies in the specified class path to be resolved before it can
            execute: <code>compile</code>, <code>runtime</code>, <code>test</code>,
            <code>compile+runtime</code> (since Maven 3.0) or <code>runtime+system</code> (since Maven 3.0)
          ]]></description>
        </field>
        <field>
          <name>dependencyResolution</name>
          <version>2.0.0+</version>
          <type>String</type>
          <defaultValue>runtime</defaultValue>
          <description><![CDATA[
            Flags this Mojo as requiring the dependencies in the specified class path to be resolved before it can
            execute: <code>compile</code>, <code>runtime</code>, <code>test</code>,
            <code>compile+runtime</code> (since Maven 3.0) or <code>runtime+system</code> (since Maven 3.0)
          ]]></description>
        </field>
        <field>
          <name>requiresDependencyCollection</name>
          <version>1.0.0/1.1.0</version>
          <type>String</type>
          <description><![CDATA[
            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><![CDATA[
            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><![CDATA[
            Specify the execution strategy: <code>once-per-session</code>, <code>always</code>.
          ]]></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><![CDATA[
            Description with the reason of Mojo deprecation. Similar to Javadoc <code>@deprecated</code>
            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><![CDATA[
            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;</code> 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><![CDATA[
            Description with the reason of parameter deprecation. Similar to Javadoc <code>@deprecated</code>
            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>
