You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2026/09/24 07:16:31 UTC

(maven) branch master updated: docs: document plugin.xml V4 vs V3

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 4398d6569d docs: document plugin.xml V4 vs V3
4398d6569d is described below

commit 4398d6569d5a98361bc96f8f96f384743c303157
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Thu Sep 24 09:16:25 2026 +0200

    docs: document plugin.xml V4 vs V3
    
    - Add dedicated site documentation for the V3 plugin.mdo model in compat/maven-plugin-api, cross-linking to the V4 documentation
    - Add dedicated site documentation for the V4 plugin.mdo model in api/maven-api-plugin, cross-linking to the V3 documentation
    - Fill in missing descriptions for goalPrefix, isolatedRealm, inheritedByDefault, executeLifecycle, composer, parameters, configuration and roleHint fields in both V3 and V4 plugin.mdo
    - Remove incorrect defaultValue 'runtime' from requiresDependencyResolution (MojoDescriptor initialises this field to null by default)
    - Fix grammar: 'immutable models' -> 'immutable model' in index.md
    - Fix typo: 'wrong this documentation' -> 'wrong with this documentation'
---
 api/maven-api-plugin/src/main/mdo/plugin.mdo       |  16 +-
 api/maven-api-plugin/src/site/markdown/index.md    |  14 +-
 compat/maven-compat/src/site/markdown/index.md     |   2 +-
 compat/maven-plugin-api/pom.xml                    |  19 ++
 .../maven-plugin-api}/src/main/mdo/plugin.mdo      | 358 +++++++--------------
 compat/maven-plugin-api/src/site/markdown/index.md |   3 +-
 compat/maven-plugin-api/src/site/site.xml          |   3 +-
 7 files changed, 153 insertions(+), 262 deletions(-)

diff --git a/api/maven-api-plugin/src/main/mdo/plugin.mdo b/api/maven-api-plugin/src/main/mdo/plugin.mdo
index 64bee167ed..5d29f2db55 100644
--- a/api/maven-api-plugin/src/main/mdo/plugin.mdo
+++ b/api/maven-api-plugin/src/main/mdo/plugin.mdo
@@ -69,20 +69,20 @@ under the License.
         <field>
           <name>goalPrefix</name>
           <version>1.0.0+</version>
-          <description></description>
+          <description>The prefix for the plugin's goal names as used on the command line (e.g. {@code compiler} for {@code compiler:compile}).</description>
           <type>String</type>
         </field>
         <field>
           <name>isolatedRealm</name>
           <version>1.0.0+</version>
-          <description></description>
+          <description>If set to {@code true}, the plugin will be loaded in isolation; it will not share the class loader with other plugins. Defaults to {@code false}.</description>
           <type>boolean</type>
           <defaultValue>false</defaultValue>
         </field>
         <field>
           <name>inheritedByDefault</name>
           <version>1.0.0+</version>
-          <description></description>
+          <description>If set to {@code true}, Mojos in this plugin are inherited by child projects by default. Defaults to {@code true}.</description>
           <type>boolean</type>
           <defaultValue>true</defaultValue>
         </field>
@@ -206,7 +206,7 @@ under the License.
           <name>executeLifecycle</name>
           <version>1.0.0+</version>
           <type>String</type>
-          <description></description>
+          <description>Specifies the name of a custom lifecycle to execute when this Mojo is forking execution (used together with {@code executePhase}).</description>
         </field>
         <field>
           <name>requiresDependencyResolution</name>
@@ -384,12 +384,12 @@ under the License.
           <name>composer</name>
           <version>1.0.0/1.1.0</version>
           <type>String</type>
-          <description></description>
+          <description>The composer type for this Mojo, used to compose the Mojo instance. Normally deduced from the implementation language.</description>
         </field>
         <field xdoc.separator="blank">
           <name>parameters</name>
           <version>1.0.0+</version>
-          <description></description>
+          <description>The list of parameters that can be used to configure this Mojo.</description>
           <association>
             <type>Parameter</type>
             <multiplicity>*</multiplicity>
@@ -398,7 +398,7 @@ under the License.
         <field xdoc.separator="blank">
           <name>resolutions</name>
           <version>2.0.0+</version>
-          <description></description>
+          <description>Dependency collection or resolution injections declared by {@code @Resolution} annotations on the Mojo class. Each entry specifies a field to inject with the resolved or collected dependency tree for a given path scope.</description>
           <association>
             <type>Resolution</type>
             <multiplicity>*</multiplicity>
@@ -560,7 +560,7 @@ under the License.
         <field xml.tagName="role-hint">
           <name>roleHint</name>
           <type>String</type>
-          <description></description>
+          <description>The Plexus role hint to disambiguate multiple implementations of the same role (used to identify specific component instances).</description>
         </field>
         <field xml.tagName="field-name">
           <name>fieldName</name>
diff --git a/api/maven-api-plugin/src/site/markdown/index.md b/api/maven-api-plugin/src/site/markdown/index.md
index bcbdadc0b4..ba376ef27e 100644
--- a/api/maven-api-plugin/src/site/markdown/index.md
+++ b/api/maven-api-plugin/src/site/markdown/index.md
@@ -26,8 +26,20 @@ under the License.
 
 # Maven 4 API - Plugin Descriptor Model
 
-This is the immutable model for Maven Plugin Descriptor in `org.apache.maven.api.plugin.descriptor` package.
+This is the immutable model for Maven 4 Plugin Descriptor classes in `org.apache.maven.api.plugin.descriptor` package
+and associated lifecycle bindings in `org.apache.maven.api.plugin.descriptor.lifecycle`.
+
+Data about a plugin is stored in [`META-INF/maven/plugin.xml` plugin descriptor](./plugin.html),
+generally generated from plugin sources using [maven-plugin-plugin](/plugin-tools/maven-plugin-plugin/)
+and [Maven 4 API Core plugin annotations](../maven-api-core/) or [Maven 3 Plugin Tools' annotations](/plugin-tools/maven-plugin-annotations/index.html).
 
 The following are generated from this model:
 
 - [Java sources](./apidocs/index.html) with `Builder` inner classes for immutable instances creation.
+- [`META-INF/maven/plugin.xml` plugin descriptor](./plugin.html)
+- [`META-INF/maven/lifecycle.xml` plugin descriptor](./lifecycle.html)
+
+## See Also
+
+- [Maven 4 API Core](../maven-api-core/)
+- [Maven 3 plugin API and descriptor](../../compat/maven-plugin-api/)
diff --git a/compat/maven-compat/src/site/markdown/index.md b/compat/maven-compat/src/site/markdown/index.md
index 27cf9fe5c2..e091d4385c 100644
--- a/compat/maven-compat/src/site/markdown/index.md
+++ b/compat/maven-compat/src/site/markdown/index.md
@@ -24,7 +24,7 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-# Maven Compat
+# Maven 2 Compat (deprecated)
 
 Maven2 classes maintained as compatibility layer for plugins that need to keep Maven2 compatibility.
 
diff --git a/compat/maven-plugin-api/pom.xml b/compat/maven-plugin-api/pom.xml
index 6bd39596de..9f8f42bbf8 100644
--- a/compat/maven-plugin-api/pom.xml
+++ b/compat/maven-plugin-api/pom.xml
@@ -96,6 +96,25 @@ under the License.
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.codehaus.modello</groupId>
+        <artifactId>modello-maven-plugin</artifactId>
+        <configuration>
+          <version>1.0.0</version>
+          <models>
+            <model>src/main/mdo/plugin.mdo</model>
+          </models>
+        </configuration>
+        <executions>
+          <execution>
+            <id>modello</id>
+            <goals>
+              <goal>xdoc</goal>
+            </goals>
+            <phase>generate-sources</phase>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>com.github.siom79.japicmp</groupId>
         <artifactId>japicmp-maven-plugin</artifactId>
diff --git a/api/maven-api-plugin/src/main/mdo/plugin.mdo b/compat/maven-plugin-api/src/main/mdo/plugin.mdo
similarity index 63%
copy from api/maven-api-plugin/src/main/mdo/plugin.mdo
copy to compat/maven-plugin-api/src/main/mdo/plugin.mdo
index 64bee167ed..1dcd96e1ec 100644
--- a/api/maven-api-plugin/src/main/mdo/plugin.mdo
+++ b/compat/maven-plugin-api/src/main/mdo/plugin.mdo
@@ -18,95 +18,92 @@ 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">
+       xsi:schemaLocation="http://codehaus-plexus.github.io/MODELLO/2.0.0 https://codehaus-plexus.github.io/modello/xsd/modello-2.0.0.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>
+    Maven 3 plugin descriptor, stored in <code>META-INF/maven/plugin.xml</code> in a plugin's jar artifact.
+    This descriptor is generally generated from plugin sources, using
+    <a href="/plugins/maven-plugin-plugin/">maven-plugin-plugin</a>.
+    <p><i>Notice:</i> this documentation is generated from a Modello model but the
+    <a href="apidocs/org/apache/maven/plugin/descriptor/PluginDescriptor.html"><code>PluginDescriptor</code></a>/<a href="apidocs/org/apache/maven/plugin/descriptor/MojoDescriptor.html"><code>MojoDescriptor</code></a>
+    code executed is not generated from this model. Please report if you find anything wrong with this documentation.</p>
   ]]></description>
+  <defaults>
+    <default>
+      <key>package</key>
+      <value>plugin descriptor XML documentation (no java generation)</value><!-- intentionally non-buildable value -->
+    </default>
+  </defaults>
   <classes>
     <class rootElement="true" xml.tagName="plugin" xdoc.anchorName="plugin">
       <name>PluginDescriptor</name>
-      <version>1.0.0+</version>
+      <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>
+          <version>1.0.0</version>
           <description>Name of the plugin.</description>
           <type>String</type>
         </field>
         <field>
           <name>description</name>
-          <version>1.0.0+</version>
+          <version>1.0.0</version>
           <description>Description of the plugin.</description>
           <type>String</type>
         </field>
         <field>
           <name>groupId</name>
-          <version>1.0.0+</version>
+          <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>
+          <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>
+          <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>
+          <version>1.0.0</version>
+          <description>The prefix for the plugin's goal names as used on the command line (e.g. {@code compiler} for {@code compiler:compile}).</description>
           <type>String</type>
         </field>
         <field>
           <name>isolatedRealm</name>
-          <version>1.0.0+</version>
-          <description></description>
+          <version>1.0.0</version>
+          <description>If set to {@code true}, the plugin will be loaded in isolation; it will not share the class loader with other plugins. Defaults to {@code false}.</description>
           <type>boolean</type>
           <defaultValue>false</defaultValue>
         </field>
         <field>
           <name>inheritedByDefault</name>
-          <version>1.0.0+</version>
-          <description></description>
+          <version>1.0.0</version>
+          <description>If set to {@code true}, Mojos in this plugin are inherited by child projects by default. Defaults to {@code true}.</description>
           <type>boolean</type>
           <defaultValue>true</defaultValue>
         </field>
         <field>
           <name>requiredJavaVersion</name>
-          <version>1.1.0+</version>
+          <version>1.0.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
+            @since Used by Maven 4.0.0-alpha-3+ and 3.9.12+, generated by maven-plugin-tools 3.8.0+
           </description>
           <type>String</type>
         </field>
         <field xdoc.separator="blank">
           <name>mojos</name>
-          <version>1.0.0+</version>
+          <version>1.0.0</version>
           <association>
             <type>MojoDescriptor</type>
             <multiplicity>*</multiplicity>
@@ -115,7 +112,7 @@ under the License.
         </field>
         <field xdoc.separator="blank">
           <name>dependencies</name>
-          <version>1.0.0/1.1.0</version>
+          <version>1.0.0</version>
           <association>
             <type>Dependency</type>
             <multiplicity>*</multiplicity>
@@ -126,32 +123,17 @@ under the License.
           </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>
+      <version>1.0.0</version>
       <description>A Mojo description.</description>
       <fields>
         <field>
           <name>goal</name>
           <required>true</required>
-          <version>1.0.0+</version>
+          <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,
@@ -160,13 +142,13 @@ under the License.
         </field>
         <field>
           <name>description</name>
-          <version>1.0.0+</version>
+          <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>
+          <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).
@@ -174,14 +156,14 @@ under the License.
         </field>
         <field>
           <name>language</name>
-          <version>1.0.0+</version>
+          <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>
+          <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.
@@ -192,35 +174,25 @@ under the License.
         </field>
         <field>
           <name>executePhase</name>
-          <version>1.0.0+</version>
+          <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>
+          <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>
+          <version>1.0.0</version>
           <type>String</type>
-          <description></description>
+          <description>Specifies the name of a custom lifecycle to execute when this Mojo is forking execution (used together with {@code executePhase}).</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>
+          <version>1.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
@@ -230,20 +202,7 @@ under the License.
         </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>
+          <version>1.0.0</version>
           <type>String</type>
           <description>
             Flags this Mojo as requiring information about the dependencies that would make up the specified class
@@ -256,56 +215,35 @@ under the License.
         </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>
+          <version>1.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>
+          <version>1.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 -->
+          <version>1.0.0</version>
           <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>
+          <version>1.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>
+          <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
@@ -315,14 +253,14 @@ under the License.
         </field>
         <field>
           <name>inheritedByDefault</name>
-          <version>1.0.0+</version>
+          <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>
+          <version>1.0.0</version>
           <type>boolean</type>
           <description>
             Marks this Mojo as being thread-safe, i.e. the Mojo safely supports concurrent execution during parallel
@@ -332,23 +270,16 @@ under the License.
           </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>
+          <version>1.0.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>
+          <version>1.0.0</version>
           <type>String</type>
           <description>
             Specify the execution strategy: {@code once-per-session}, {@code always}.
@@ -357,13 +288,13 @@ under the License.
         </field>
         <field>
           <name>since</name>
-          <version>1.0.0+</version>
+          <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>
+          <version>1.0.0</version>
           <type>String</type>
           <description>
             Description with the reason of Mojo deprecation. Similar to Javadoc {@code @deprecated}
@@ -372,7 +303,7 @@ under the License.
         </field>
         <field>
           <name>configurator</name>
-          <version>1.0.0+</version>
+          <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
@@ -382,31 +313,31 @@ under the License.
         </field>
         <field>
           <name>composer</name>
-          <version>1.0.0/1.1.0</version>
+          <version>1.0.0</version>
           <type>String</type>
-          <description></description>
+          <description>The composer type for this Mojo, used to compose the Mojo instance. Normally deduced from the implementation language.</description>
         </field>
         <field xdoc.separator="blank">
           <name>parameters</name>
-          <version>1.0.0+</version>
-          <description></description>
+          <version>1.0.0</version>
+          <description>The list of parameters that can be used to configure this Mojo.</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>
+        <field>
+          <name>configuration</name>
+          <version>1.0.0</version>
+          <description>Default parameter configuration values provided by the plugin for this Mojo.</description>
+          <association xml.tagName="paramName">
+            <type>Configuration</type>
             <multiplicity>*</multiplicity>
           </association>
         </field>
         <field xdoc.separator="blank">
           <name>requirements</name>
-          <version>1.0.0/1.1.0</version>
+          <version>1.0.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.
@@ -416,45 +347,18 @@ under the License.
             <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>
+      <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>
+          <version>1.0.0</version>
           <type>String</type>
           <required>true</required>
           <description>
@@ -464,7 +368,7 @@ under the License.
         </field>
         <field>
           <name>alias</name>
-          <version>1.0.0+</version>
+          <version>1.0.0</version>
           <type>String</type>
           <description>
             Specifies an alias which can be used to configure this parameter from the POM.
@@ -474,7 +378,7 @@ under the License.
         </field>
         <field>
           <name>type</name>
-          <version>1.0.0+</version>
+          <version>1.0.0</version>
           <type>String</type>
           <required>true</required>
           <description>
@@ -484,7 +388,7 @@ under the License.
         </field>
         <field>
           <name>required</name>
-          <version>1.0.0+</version>
+          <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
@@ -493,7 +397,7 @@ under the License.
         </field>
         <field>
           <name>editable</name>
-          <version>1.0.0+</version>
+          <version>1.0.0</version>
           <type>boolean</type>
           <defaultValue>true</defaultValue>
           <description>
@@ -506,36 +410,58 @@ under the License.
             full of Strings.
           </description>
         </field>
+        <field>
+          <name>implementation</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>The fully-qualified Java type to use for this parameter, overriding the declared type. Rarely needed — only set when the plugin descriptor is generated from non-Java sources or when the runtime type must differ from the declared type.</description>
+        </field>
         <field>
           <name>description</name>
-          <version>1.0.0+</version>
+          <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>
+          <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>
+          <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>
+      </fields>
+    </class>
+
+    <class>
+      <name>Configuration</name>
+      <version>1.0.0</version>
+      <description>A parameter configuration.</description>
+      <!-- see o.a.m.plugin.descriptor.Parameter -->
+      <fields>
+        <field xml.content="true">
           <name>expression</name>
-          <version>2.0.0+</version>
+          <required>true</required>
+          <version>1.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>
+        <field xml.attribute="true" xml.tagName="implementation">
+          <name>implementation</name>
+          <version>1.0.0</version>
+          <type>String</type>
+          <description>Optional fully-qualified Java type used to convert the configuration value (expression or default value) into the target type at injection time.</description>
+        </field>
+        <field xml.attribute="true" xml.tagName="default-value">
           <name>defaultValue</name>
-          <version>2.0.0+</version>
+          <version>1.0.0</version>
           <type>String</type>
           <description>The default value, as an expression that will be evaluated at injection or run-time.</description>
         </field>
@@ -544,7 +470,7 @@ under the License.
 
     <class xdoc.anchorName="requirement">
       <name>Requirement</name>
-      <version>1.0.0/1.1.0</version>
+      <version>1.0.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.
@@ -554,17 +480,20 @@ under the License.
         <field>
           <name>role</name>
           <required>true</required>
+          <version>1.0.0</version>
           <type>String</type>
           <description>Plexus role of the component to inject.</description>
         </field>
         <field xml.tagName="role-hint">
           <name>roleHint</name>
+          <version>1.0.0</version>
           <type>String</type>
-          <description></description>
+          <description>The Plexus role hint to disambiguate multiple implementations of the same role (used to identify specific component instances).</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 component requirement.</description>
         </field>
@@ -573,106 +502,37 @@ under the License.
 
     <class xdoc.anchorName="dependency">
       <name>Dependency</name>
-      <version>1.0.0/1.1.0</version>
+      <version>1.0.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>
+          <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>
+          <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>
+          <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>
+          <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>
diff --git a/compat/maven-plugin-api/src/site/markdown/index.md b/compat/maven-plugin-api/src/site/markdown/index.md
index 71fcd96da4..580e0b334b 100644
--- a/compat/maven-plugin-api/src/site/markdown/index.md
+++ b/compat/maven-plugin-api/src/site/markdown/index.md
@@ -31,10 +31,11 @@ The API for Maven 3 plugins - composed of goals implemented by Mojos - developme
 - goal code extends [`AbstractMojo` base class](./apidocs/org/apache/maven/plugin/AbstractMojo.html) that implements [`Mojo` interface](./apidocs/org/apache/maven/plugin/Mojo.html),
 - [`Log` interface](./apidocs/org/apache/maven/plugin/logging/Log.html) provides easy logging for the goal.
 
-A plugin is described in a [`META-INF/maven/plugin.xml` plugin descriptor](../../api/maven-api-plugin/plugin.html), generally generated from plugin sources using [maven-plugin-plugin](/plugin-tools/maven-plugin-plugin/).
+A Maven 3 plugin is described in a [`META-INF/maven/plugin.xml` plugin descriptor](./plugin.html), generally generated from plugin sources using [maven-plugin-plugin](/plugin-tools/maven-plugin-plugin/).
 
 ## See Also
 
 - [Mojo API Specification](/developers/mojo-api-specification.html)
 - [Plugin Tools](/plugin-tools/) that provide [maven-plugin-plugin](/plugin-tools/maven-plugin-plugin/) to generate the [`META-INF/maven/plugin.xml` plugin descriptor](./plugin.html)
 - [Plugin Testing](/plugin-testing/) frameworks
+- Maven 4 evolution of [plugin descriptor](../../api/maven-api-plugin/)
diff --git a/compat/maven-plugin-api/src/site/site.xml b/compat/maven-plugin-api/src/site/site.xml
index 33e9809aa6..9b07c2028a 100644
--- a/compat/maven-plugin-api/src/site/site.xml
+++ b/compat/maven-plugin-api/src/site/site.xml
@@ -32,8 +32,7 @@
       <!--item name="FAQ" href="faq.html"/-->
     </menu>
     <menu name="Reference">
-      <item name="META-INF/maven/lifecycle.xml" href="lifecycle-mappings.html"/>
-      <item name="META-INF/maven/plugin.xml" href="plugin.html"/>
+      <item name="Maven 3 META-INF/maven/plugin.xml" href="plugin.html"/>
     </menu>
   </body>
 </site>