diff --git a/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Component.java b/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Component.java
index 9afbd65..29d4d4a 100644
--- a/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Component.java
+++ b/maven-plugin-annotations/src/main/java/org/apache/maven/plugins/annotations/Component.java
@@ -29,7 +29,9 @@ import java.lang.annotation.Target;
/**
* Used to configure injection of Plexus components by
*
- * MavenPluginManager.getConfiguredMojo(...).
+ * MavenPluginManager.getConfiguredMojo(...) and special Maven
+ * objects as well: session, project, mojo, plugin,
+ * settings.
*
* @author Olivier Lamy
* @since 3.0
diff --git a/maven-plugin-plugin/src/it/java-basic-annotations/pom.xml b/maven-plugin-plugin/src/it/java-basic-annotations/pom.xml
index ec74889..cabbe62 100644
--- a/maven-plugin-plugin/src/it/java-basic-annotations/pom.xml
+++ b/maven-plugin-plugin/src/it/java-basic-annotations/pom.xml
@@ -42,12 +42,12 @@ under the License.
org.apache.maven
maven-plugin-api
- 2.0
+ 2.2.1
org.apache.maven
- maven-project
- 2.0
+ maven-core
+ 2.2.1
org.codehaus.plexus
diff --git a/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java b/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java
index 72bfe45..61268e5 100644
--- a/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java
+++ b/maven-plugin-plugin/src/it/java-basic-annotations/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java
@@ -19,15 +19,20 @@ package org.apache.maven.plugin.coreit;
* under the License.
*/
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.plugins.annotations.Execute;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.settings.Settings;
import java.io.File;
@@ -63,6 +68,21 @@ public class FirstMojo
@Component( role = MavenProjectHelper.class, hint = "test" )
private Object projectHelper;
+ @Component
+ private MavenSession session;
+
+ @Component
+ private MavenProject project;
+
+ @Component
+ private MojoExecution mojo;
+
+ @Component
+ private PluginDescriptor plugin;
+
+ @Component
+ private Settings settings;
+
public void execute()
throws MojoExecutionException
{
diff --git a/maven-plugin-plugin/src/it/java-basic-annotations/verify.groovy b/maven-plugin-plugin/src/it/java-basic-annotations/verify.groovy
index ff2f74e..0a36619 100644
--- a/maven-plugin-plugin/src/it/java-basic-annotations/verify.groovy
+++ b/maven-plugin-plugin/src/it/java-basic-annotations/verify.groovy
@@ -32,16 +32,35 @@ assert mojo.configuration.touchFile[0].text() == '${first.touchFile}'
assert mojo.configuration.touchFile[0].'@implementation' == 'java.io.File'
assert mojo.configuration.touchFile[0].'@default-value' == '${project.build.directory}/touch.txt'
+assert mojo.configuration.session[0].text() == ''
+assert mojo.configuration.session[0].'@implementation' == 'org.apache.maven.execution.MavenSession'
+assert mojo.configuration.session[0].'@default-value' == '${session}'
+
+assert mojo.configuration.project[0].text() == ''
+assert mojo.configuration.project[0].'@implementation' == 'org.apache.maven.project.MavenProject'
+assert mojo.configuration.project[0].'@default-value' == '${project}'
+
+assert mojo.configuration.mojo[0].text() == ''
+assert mojo.configuration.mojo[0].'@implementation' == 'org.apache.maven.plugin.MojoExecution'
+assert mojo.configuration.mojo[0].'@default-value' == '${mojo}'
+
+assert mojo.configuration.plugin[0].text() == ''
+assert mojo.configuration.plugin[0].'@implementation' == 'org.apache.maven.plugin.descriptor.PluginDescriptor'
+assert mojo.configuration.plugin[0].'@default-value' == '${plugin}'
+
+assert mojo.configuration.settings[0].text() == ''
+assert mojo.configuration.settings[0].'@implementation' == 'org.apache.maven.settings.Settings'
+assert mojo.configuration.settings[0].'@default-value' == '${settings}'
+
assert mojo.requirements.requirement.size() == 1
assert mojo.requirements.requirement[0].role.text() == 'org.apache.maven.project.MavenProjectHelper'
assert mojo.requirements.requirement[0].'role-hint'.text() == 'test'
assert mojo.requirements.requirement[0].'field-name'.text() == 'projectHelper'
-assert mojo.parameters.parameter.size() == 3
-
-def parameter = mojo.parameters.parameter.findAll{ it.name.text() == "aliasedParam" }[0]
+assert mojo.parameters.parameter.size() == 8
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "aliasedParam" }[0]
assert parameter.name.text() == 'aliasedParam'
assert parameter.alias.text() == 'alias'
assert parameter.type.text() == 'java.lang.String'
@@ -50,18 +69,7 @@ assert parameter.required.text() == 'false'
assert parameter.editable.text() == 'true'
assert parameter.description.text() == ''
-parameter = mojo.parameters.parameter.findAll{ it.name.text() == "touchFile" }[0]
-
-assert parameter.name.text() == 'touchFile'
-assert parameter.alias.isEmpty()
-assert parameter.type.text() == 'java.io.File'
-assert parameter.deprecated.isEmpty()
-assert parameter.required.text() == 'true'
-assert parameter.editable.text() == 'true'
-assert parameter.description.text() == ''
-
parameter = mojo.parameters.parameter.findAll{ it.name.text() == "basedir" }[0]
-
assert parameter.name.text() == 'basedir'
assert parameter.alias.isEmpty()
assert parameter.type.text() == 'java.io.File'
@@ -70,6 +78,60 @@ assert parameter.required.text() == 'false'
assert parameter.editable.text() == 'false'
assert parameter.description.text() == 'Project directory.'
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "mojo" }[0]
+assert parameter.name.text() == 'mojo'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.plugin.MojoExecution'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "plugin" }[0]
+assert parameter.name.text() == 'plugin'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.plugin.descriptor.PluginDescriptor'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "project" }[0]
+assert parameter.name.text() == 'project'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.project.MavenProject'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "session" }[0]
+assert parameter.name.text() == 'session'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.execution.MavenSession'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "settings" }[0]
+assert parameter.name.text() == 'settings'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.settings.Settings'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "touchFile" }[0]
+assert parameter.name.text() == 'touchFile'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'java.io.File'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'true'
+assert parameter.editable.text() == 'true'
+assert parameter.description.text() == ''
+
mojo = pluginDescriptor.mojos.mojo.findAll{ it.goal.text() == "second" }[0]
assert mojo.requiresDependencyCollection.text() == 'compile'
diff --git a/maven-plugin-plugin/src/it/java-basic/pom.xml b/maven-plugin-plugin/src/it/java-basic/pom.xml
index 64544ff..8b3154a 100644
--- a/maven-plugin-plugin/src/it/java-basic/pom.xml
+++ b/maven-plugin-plugin/src/it/java-basic/pom.xml
@@ -42,7 +42,12 @@ under the License.
org.apache.maven
maven-plugin-api
- 2.0
+ 2.2.1
+
+
+ org.apache.maven
+ maven-core
+ 2.2.1
diff --git a/maven-plugin-plugin/src/it/java-basic/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java b/maven-plugin-plugin/src/it/java-basic/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java
index d83a4ad..4f125f0 100644
--- a/maven-plugin-plugin/src/it/java-basic/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java
+++ b/maven-plugin-plugin/src/it/java-basic/src/main/java/org/apache/maven/plugin/coreit/FirstMojo.java
@@ -19,8 +19,13 @@ package org.apache.maven.plugin.coreit;
* under the License.
*/
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
import java.io.File;
import java.io.IOException;
@@ -64,6 +69,31 @@ public class FirstMojo
*/
private Object projectHelper;
+ /**
+ * @component
+ */
+ private MavenSession session;
+
+ /**
+ * @component
+ */
+ private MavenProject project;
+
+ /**
+ * @component
+ */
+ private MojoExecution mojo;
+
+ /**
+ * @component
+ */
+ private PluginDescriptor plugin;
+
+ /**
+ * @component
+ */
+ private Settings settings;
+
public void execute()
throws MojoExecutionException
{
diff --git a/maven-plugin-plugin/src/it/java-basic/verify.groovy b/maven-plugin-plugin/src/it/java-basic/verify.groovy
index 3d274c5..ca3eae1 100644
--- a/maven-plugin-plugin/src/it/java-basic/verify.groovy
+++ b/maven-plugin-plugin/src/it/java-basic/verify.groovy
@@ -32,37 +32,105 @@ assert mojo.configuration.touchFile[0].text() == '${first.touchFile}'
assert mojo.configuration.touchFile[0].'@implementation' == 'java.io.File'
assert mojo.configuration.touchFile[0].'@default-value' == '${project.build.directory}/touch.txt'
+assert mojo.configuration.session[0].text() == ''
+assert mojo.configuration.session[0].'@implementation' == 'org.apache.maven.execution.MavenSession'
+assert mojo.configuration.session[0].'@default-value' == '${session}'
+
+assert mojo.configuration.project[0].text() == ''
+assert mojo.configuration.project[0].'@implementation' == 'org.apache.maven.project.MavenProject'
+assert mojo.configuration.project[0].'@default-value' == '${project}'
+
+assert mojo.configuration.mojo[0].text() == ''
+assert mojo.configuration.mojo[0].'@implementation' == 'org.apache.maven.plugin.MojoExecution'
+assert mojo.configuration.mojo[0].'@default-value' == '${mojo}'
+
+assert mojo.configuration.plugin[0].text() == ''
+assert mojo.configuration.plugin[0].'@implementation' == 'org.apache.maven.plugin.descriptor.PluginDescriptor'
+assert mojo.configuration.plugin[0].'@default-value' == '${plugin}'
+
+assert mojo.configuration.settings[0].text() == ''
+assert mojo.configuration.settings[0].'@implementation' == 'org.apache.maven.settings.Settings'
+assert mojo.configuration.settings[0].'@default-value' == '${settings}'
+
assert mojo.requirements.requirement.size() == 1
assert mojo.requirements.requirement[0].role.text() == 'org.apache.maven.project.MavenProjectHelper'
assert mojo.requirements.requirement[0].'role-hint'.text() == 'test'
assert mojo.requirements.requirement[0].'field-name'.text() == 'projectHelper'
-assert mojo.parameters.parameter.size() == 3
+assert mojo.parameters.parameter.size() == 8
-assert mojo.parameters.parameter[0].name.text() == 'aliasedParam'
-assert mojo.parameters.parameter[0].alias.text() == 'alias'
-assert mojo.parameters.parameter[0].type.text() == 'java.lang.String'
-assert mojo.parameters.parameter[0].deprecated.text() == 'As of 0.2'
-assert mojo.parameters.parameter[0].required.text() == 'false'
-assert mojo.parameters.parameter[0].editable.text() == 'true'
-assert mojo.parameters.parameter[0].description.text() == ''
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "aliasedParam" }[0]
+assert parameter.name.text() == 'aliasedParam'
+assert parameter.alias.text() == 'alias'
+assert parameter.type.text() == 'java.lang.String'
+assert parameter.deprecated.text() == 'As of 0.2'
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'true'
+assert parameter.description.text() == ''
-assert mojo.parameters.parameter[1].name.text() == 'basedir'
-assert mojo.parameters.parameter[1].alias.isEmpty()
-assert mojo.parameters.parameter[1].type.text() == 'java.io.File'
-assert mojo.parameters.parameter[1].deprecated.isEmpty()
-assert mojo.parameters.parameter[1].required.text() == 'false'
-assert mojo.parameters.parameter[1].editable.text() == 'false'
-assert mojo.parameters.parameter[1].description.text() == 'Project directory.'
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "basedir" }[0]
+assert parameter.name.text() == 'basedir'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'java.io.File'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == 'Project directory.'
-assert mojo.parameters.parameter[2].name.text() == 'touchFile'
-assert mojo.parameters.parameter[2].alias.isEmpty()
-assert mojo.parameters.parameter[2].type.text() == 'java.io.File'
-assert mojo.parameters.parameter[2].deprecated.isEmpty()
-assert mojo.parameters.parameter[2].required.text() == 'true'
-assert mojo.parameters.parameter[2].editable.text() == 'true'
-assert mojo.parameters.parameter[2].description.text() == ''
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "mojo" }[0]
+assert parameter.name.text() == 'mojo'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.plugin.MojoExecution'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "plugin" }[0]
+assert parameter.name.text() == 'plugin'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.plugin.descriptor.PluginDescriptor'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "project" }[0]
+assert parameter.name.text() == 'project'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.project.MavenProject'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "session" }[0]
+assert parameter.name.text() == 'session'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.execution.MavenSession'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "settings" }[0]
+assert parameter.name.text() == 'settings'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'org.apache.maven.settings.Settings'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'false'
+assert parameter.editable.text() == 'false'
+assert parameter.description.text() == ''
+
+parameter = mojo.parameters.parameter.findAll{ it.name.text() == "touchFile" }[0]
+assert parameter.name.text() == 'touchFile'
+assert parameter.alias.isEmpty()
+assert parameter.type.text() == 'java.io.File'
+assert parameter.deprecated.isEmpty()
+assert parameter.required.text() == 'true'
+assert parameter.editable.text() == 'true'
+assert parameter.description.text() == ''
mojo = pluginDescriptor.mojos.mojo.findAll{ it.goal.text() == "second"}[0]
diff --git a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java
index 117c032..f78ad08 100644
--- a/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java
+++ b/maven-plugin-tools-annotations/src/main/java/org/apache/maven/tools/plugin/annotations/JavaAnnotationsMojoDescriptorExtractor.java
@@ -47,6 +47,7 @@ import org.apache.maven.tools.plugin.annotations.scanner.MojoAnnotationsScanner;
import org.apache.maven.tools.plugin.annotations.scanner.MojoAnnotationsScannerRequest;
import org.apache.maven.tools.plugin.extractor.ExtractionException;
import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor;
+import org.apache.maven.tools.plugin.util.PluginUtils;
import org.codehaus.plexus.archiver.UnArchiver;
import org.codehaus.plexus.archiver.manager.ArchiverManager;
import org.codehaus.plexus.archiver.manager.NoSuchArchiverException;
@@ -545,8 +546,19 @@ public class JavaAnnotationsMojoDescriptorExtractor
org.apache.maven.plugin.descriptor.Parameter parameter =
new org.apache.maven.plugin.descriptor.Parameter();
parameter.setName( componentAnnotationContent.getFieldName() );
- parameter.setRequirement( new Requirement( componentAnnotationContent.getRoleClassName(),
- componentAnnotationContent.hint() ) );
+
+ String expression = PluginUtils.MAVEN_COMPONENTS.get( componentAnnotationContent.getRoleClassName() );
+ if ( expression == null )
+ {
+ parameter.setRequirement( new Requirement( componentAnnotationContent.getRoleClassName(),
+ componentAnnotationContent.hint() ) );
+ }
+ else
+ {
+ parameter.setDefaultValue( expression );
+ parameter.setImplementation( componentAnnotationContent.getRoleClassName() );
+ parameter.setType( componentAnnotationContent.getRoleClassName() );
+ }
parameter.setDeprecated( componentAnnotationContent.getDeprecated() );
parameter.setSince( componentAnnotationContent.getSince() );
@@ -563,7 +575,6 @@ public class JavaAnnotationsMojoDescriptorExtractor
return mojoDescriptors;
}
-
protected ExecuteAnnotationContent findExecuteInParentHierarchy( MojoAnnotatedClass mojoAnnotatedClass,
Map mojoAnnotatedClasses )
{
diff --git a/maven-plugin-tools-annotations/src/site/apt/index.apt b/maven-plugin-tools-annotations/src/site/apt/index.apt
index c9fcec7..08e8383 100644
--- a/maven-plugin-tools-annotations/src/site/apt/index.apt
+++ b/maven-plugin-tools-annotations/src/site/apt/index.apt
@@ -35,7 +35,10 @@ Maven Plugin Tool for Annotations
* Supported Annotations
+---------+
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Execute;
@@ -43,6 +46,8 @@ import org.apache.maven.plugins.annotations.InstanciationStrategy;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
/**
* Mojo Description. @Mojo( name = "" ) is the minimal required annotation.
@@ -88,6 +93,21 @@ public class MyMojo
hint = "..." )
private MyComponent component;
+ @Component
+ private MavenSession session;
+
+ @Component
+ private MavenProject project;
+
+ @Component
+ private MojoExecution mojo;
+
+ @Component
+ private PluginDescriptor plugin;
+
+ @Component
+ private Settings settings;
+
public void execute()
{
...
diff --git a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
index cbfef23..fa97c1f 100644
--- a/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
+++ b/maven-plugin-tools-api/src/main/java/org/apache/maven/tools/plugin/util/PluginUtils.java
@@ -21,7 +21,9 @@ package org.apache.maven.tools.plugin.util;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.apache.maven.plugin.descriptor.MojoDescriptor;
import org.apache.maven.plugin.descriptor.Parameter;
@@ -42,6 +44,23 @@ public final class PluginUtils
// nop
}
+ /**
+ * Expression associated with class types to recognize Maven objects as components.
+ */
+ public static final Map MAVEN_COMPONENTS;
+ static
+ {
+ Map mavenComponents = new HashMap();
+
+ mavenComponents.put( "org.apache.maven.execution.MavenSession", "${session}" );
+ mavenComponents.put( "org.apache.maven.project.MavenProject", "${project}" );
+ mavenComponents.put( "org.apache.maven.plugin.MojoExecution", "${mojo}" );
+ mavenComponents.put( "org.apache.maven.plugin.descriptor.PluginDescriptor", "${plugin}" );
+ mavenComponents.put( "org.apache.maven.settings.Settings", "${settings}" );
+
+ MAVEN_COMPONENTS = Collections.unmodifiableMap( mavenComponents );
+ }
+
/**
* @param basedir not null
* @param include not null
diff --git a/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java b/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java
index 79fb26e..0f27d31 100644
--- a/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java
+++ b/maven-plugin-tools-java/src/main/java/org/apache/maven/tools/plugin/extractor/java/JavaMojoDescriptorExtractor.java
@@ -37,6 +37,7 @@ import org.apache.maven.tools.plugin.ExtendedMojoDescriptor;
import org.apache.maven.tools.plugin.PluginToolsRequest;
import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor;
import org.apache.maven.tools.plugin.extractor.ExtractionException;
+import org.apache.maven.tools.plugin.util.PluginUtils;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -513,7 +514,18 @@ public class JavaMojoDescriptorExtractor
roleHint = componentTag.getNamedParameter( "role-hint" );
}
- pd.setRequirement( new Requirement( role, roleHint ) );
+ String expression = PluginUtils.MAVEN_COMPONENTS.get( role );
+
+ if ( expression == null )
+ {
+ pd.setRequirement( new Requirement( role, roleHint ) );
+ }
+ else
+ {
+ pd.setDefaultValue( expression );
+ pd.setImplementation( role );
+ pd.setType( role );
+ }
pd.setEditable( false );
/* TODO: or better like this? Need @component fields be editable for the user?
diff --git a/maven-plugin-tools-java/src/site/apt/index.apt b/maven-plugin-tools-java/src/site/apt/index.apt
index 9094c91..68b1bc3 100644
--- a/maven-plugin-tools-java/src/site/apt/index.apt
+++ b/maven-plugin-tools-java/src/site/apt/index.apt
@@ -35,7 +35,12 @@ Maven Plugin Tool for Java Annotated with Mojo Javadoc Tags
* Supported Mojo Javadoc Tags
+---------+
+import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
/**
* Mojo Description: goal is the only required annotation.
@@ -77,6 +82,31 @@ public class MyMojo
*/
private Component component;
+ /**
+ * @component
+ */
+ private MavenSession session;
+
+ /**
+ * @component
+ */
+ private MavenProject project;
+
+ /**
+ * @component
+ */
+ private MojoExecution mojo;
+
+ /**
+ * @component
+ */
+ private PluginDescriptor plugin;
+
+ /**
+ * @component
+ */
+ private Settings settings;
+
public void execute()
{
...