<!--
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>
          <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>
          <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>resolutions</name>
          <version>2.0.0+</version>
          <description></description>
          <association>
            <type>Resolution</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
        <field xdoc.separator="blank">
          <name>requirements</name>
          <version>1.0.0/1.1.0</version>
          <description><![CDATA[
            Deprecated: Component requirements (plugin tools {@code @Component} annotation), that will be injected to Mojo fields.
            <a href="https://maven.apache.org/maven-jsr330.html">Use JSR 330 annotations</a> to inject components instead, without this descriptor.
          ]]></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>
        <field xdoc.separator="blank">
          <name>afterLinks</name>
          <version>2.0.0+</version>
          <description>
            Lifecycle ordering constraints declared by {@code @After} annotations on the Mojo class.
            Each entry specifies that this Mojo's bound phase should execute after a given target phase,
            with a pointer type ({@code PROJECT}, {@code DEPENDENCIES}, or {@code CHILDREN}) that controls
            how the ordering applies across project boundaries.
            @since 4.0.0
          </description>
          <association>
            <type>AfterLink</type>
            <multiplicity>*</multiplicity>
          </association>
        </field>
      </fields>
    </class>

    <class xdoc.anchorName="parameter">
      <name>Parameter</name>
      <version>1.0.0+</version>
      <description>A parameter description.</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><![CDATA[
        Deprecated: Describes a component requirement (plugin tools' {@code @Component} annotation), that will be injected to a Mojo field.
        <a href="https://maven.apache.org/maven-jsr330.html">Use JSR 330 annotations</a> to inject components instead, without this descriptor.
      ]]></description>
      <!-- see o.a.m.plugin.descriptor.Requirement -->
      <fields>
        <field>
          <name>role</name>
          <required>true</required>
          <type>String</type>
          <description>Plexus role of the component to inject.</description>
        </field>
        <field xml.tagName="role-hint">
          <name>roleHint</name>
          <type>String</type>
          <description></description>
        </field>
        <field xml.tagName="field-name">
          <name>fieldName</name>
          <required>true</required>
          <type>String</type>
          <description>The field name which has this component 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>

    <class xdoc.anchorName="afterLink">
      <name>AfterLink</name>
      <version>2.0.0+</version>
      <description>
        A lifecycle ordering constraint from an {@code @After} annotation on a Mojo class.
        Specifies that the Mojo's bound phase should execute after a given target phase,
        with a pointer type controlling how the ordering applies across project boundaries.
        @since 4.0.0
      </description>
      <fields>
        <field>
          <name>phase</name>
          <required>true</required>
          <version>2.0.0+</version>
          <type>String</type>
          <description>The target phase name that this Mojo should run after.</description>
        </field>
        <field>
          <name>type</name>
          <required>true</required>
          <version>2.0.0+</version>
          <type>String</type>
          <description>
            The type of pointer: {@code PROJECT} (same-project phase ordering),
            {@code DEPENDENCIES} (cross-project dependency ordering),
            or {@code CHILDREN} (parent-child module ordering).
          </description>
        </field>
        <field>
          <name>scope</name>
          <version>2.0.0+</version>
          <type>String</type>
          <description>
            The dependency scope, only meaningful when type is {@code DEPENDENCIES}.
            Examples: {@code compile}, {@code runtime}, {@code test}.
          </description>
        </field>
      </fields>
    </class>

    <class xdoc.anchorName="resolution">
      <name>Resolution</name>
      <version>2.0.0+</version>
      <description>Dependency collection or resolution injection.</description>
      <fields>
        <field>
          <name>field</name>
          <required>false</required>
          <version>2.0.0+</version>
          <type>String</type>
          <description>the name of the field to be injected</description>
        </field>
        <field>
          <name>pathScope</name>
          <required>false</required>
          <version>2.0.0+</version>
          <type>String</type>
          <description>pathScope used to flatten dependencies</description>
        </field>
        <field>
          <name>requestType</name>
          <required>false</required>
          <version>2.0.0+</version>
          <type>String</type>
          <description>either {@code collect}, {@code flatten}, or {@code resolve}</description>
        </field>
      </fields>
    </class>
  </classes>
</model>
