From 1e7bbd5bc621ad0d07e65d62d655bd2f02940e91 Mon Sep 17 00:00:00 2001 From: Herve Boutemy Date: Sun, 27 May 2012 20:21:15 +0000 Subject: [PATCH] [MPLUGIN-204] added support for some Maven objects injected as components: session, project, mojo, plugin and settings git-svn-id: https://svn.apache.org/repos/asf/maven/plugin-tools/trunk@1343086 13f79535-47bb-0310-9956-ffa450edef68 --- .../maven/plugins/annotations/Component.java | 4 +- .../src/it/java-basic-annotations/pom.xml | 6 +- .../apache/maven/plugin/coreit/FirstMojo.java | 20 ++++ .../it/java-basic-annotations/verify.groovy | 90 +++++++++++--- maven-plugin-plugin/src/it/java-basic/pom.xml | 7 +- .../apache/maven/plugin/coreit/FirstMojo.java | 30 +++++ .../src/it/java-basic/verify.groovy | 112 ++++++++++++++---- ...avaAnnotationsMojoDescriptorExtractor.java | 17 ++- .../src/site/apt/index.apt | 20 ++++ .../maven/tools/plugin/util/PluginUtils.java | 19 +++ .../java/JavaMojoDescriptorExtractor.java | 14 ++- .../src/site/apt/index.apt | 30 +++++ 12 files changed, 324 insertions(+), 45 deletions(-) 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() { ...