Package org.apache.maven.plugin.internal
Class DefaultMavenPluginManager
- java.lang.Object
-
- org.apache.maven.plugin.internal.DefaultMavenPluginManager
-
- All Implemented Interfaces:
MavenPluginManager
@Component(role=MavenPluginManager.class) public class DefaultMavenPluginManager extends java.lang.Object implements MavenPluginManager
Provides basic services to manage Maven plugins and their mojos. This component is kept general in its design such that the plugins/mojos can be used in arbitrary contexts. In particular, the mojos can be used for ordinary build plugins as well as special purpose plugins like reports.- Since:
- 3.0
-
-
Field Summary
Fields Modifier and Type Field Description private PluginDescriptorBuilderbuilderprivate ClassRealmManagerclassRealmManagerprivate org.codehaus.plexus.PlexusContainercontainerprivate ExtensionDescriptorBuilderextensionDescriptorBuilderprivate ExtensionRealmCacheextensionRealmCachestatic java.lang.StringKEY_EXTENSIONS_REALMSPluginId => ExtensionRealmCache.CacheRecord map MavenProject context value key.private org.codehaus.plexus.logging.Loggerloggerprivate org.codehaus.plexus.logging.LoggerManagerloggerManagerprivate PluginArtifactsCachepluginArtifactsCacheprivate PluginDependenciesResolverpluginDependenciesResolverprivate PluginDescriptorCachepluginDescriptorCacheprivate PluginRealmCachepluginRealmCacheprivate PluginVersionResolverpluginVersionResolverprivate RuntimeInformationruntimeInformation
-
Constructor Summary
Constructors Constructor Description DefaultMavenPluginManager()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.util.Map<java.lang.String,java.lang.ClassLoader>calcImports(MavenProject project, java.lang.ClassLoader parent, java.util.List<java.lang.String> imports)voidcheckRequiredMavenVersion(PluginDescriptor pluginDescriptor)Verifies the specified plugin is compatible with the current Maven runtime.private voidcreatePluginRealm(PluginDescriptor pluginDescriptor, MavenSession session, java.lang.ClassLoader parent, java.util.Map<java.lang.String,java.lang.ClassLoader> foreignImports, org.eclipse.aether.graph.DependencyFilter filter)private voiddiscoverPluginComponents(org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm, Plugin plugin, PluginDescriptor pluginDescriptor)private PluginDescriptorextractPluginDescriptor(Artifact pluginArtifact, Plugin plugin)<T> TgetConfiguredMojo(java.lang.Class<T> mojoInterface, MavenSession session, MojoExecution mojoExecution)Looks up the mojo for the specified mojo execution and populates its parameters from the configuration given by the mojo execution.MojoDescriptorgetMojoDescriptor(Plugin plugin, java.lang.String goal, java.util.List<org.eclipse.aether.repository.RemoteRepository> repositories, org.eclipse.aether.RepositorySystemSession session)Retrieves the descriptor for the specified plugin goal from the plugin's main artifact.PluginDescriptorgetPluginDescriptor(Plugin plugin, java.util.List<org.eclipse.aether.repository.RemoteRepository> repositories, org.eclipse.aether.RepositorySystemSession session)Retrieves the descriptor for the specified plugin from its main artifact.private java.lang.StringgetPluginDescriptorLocation()private PluginDescriptorparsePluginDescriptor(java.io.InputStream is, Plugin plugin, java.lang.String descriptorLocation)private voidpopulatePluginFields(java.lang.Object mojo, MojoDescriptor mojoDescriptor, org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm, org.codehaus.plexus.configuration.PlexusConfiguration configuration, org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator expressionEvaluator)voidreleaseMojo(java.lang.Object mojo, MojoExecution mojoExecution)Releases the specified mojo back to the container.private java.util.List<Artifact>resolveExtensionArtifacts(Plugin extensionPlugin, java.util.List<org.eclipse.aether.repository.RemoteRepository> repositories, org.eclipse.aether.RepositorySystemSession session)ExtensionRealmCache.CacheRecordsetupExtensionsRealm(MavenProject project, Plugin plugin, org.eclipse.aether.RepositorySystemSession session)Sets up class realm for the specified build extensions plugin.voidsetupPluginRealm(PluginDescriptor pluginDescriptor, MavenSession session, java.lang.ClassLoader parent, java.util.List<java.lang.String> imports, org.eclipse.aether.graph.DependencyFilter filter)Sets up the class realm for the specified plugin.private java.util.List<org.eclipse.aether.artifact.Artifact>toAetherArtifacts(java.util.List<Artifact> pluginArtifacts)private java.util.List<Artifact>toMavenArtifacts(org.eclipse.aether.graph.DependencyNode root, org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator nlg)private voidvalidateParameters(MojoDescriptor mojoDescriptor, org.codehaus.plexus.configuration.PlexusConfiguration configuration, org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator expressionEvaluator)
-
-
-
Field Detail
-
KEY_EXTENSIONS_REALMS
public static final java.lang.String KEY_EXTENSIONS_REALMS
PluginId => ExtensionRealmCache.CacheRecord map MavenProject context value key. The map is used to ensure the same class realm is used to load build extensions and load mojos for extensions=true plugins.
Note: This is part of internal implementation and may be changed or removed without notice- Since:
- 3.3.0
-
logger
@Requirement private org.codehaus.plexus.logging.Logger logger
-
loggerManager
@Requirement private org.codehaus.plexus.logging.LoggerManager loggerManager
-
container
@Requirement private org.codehaus.plexus.PlexusContainer container
-
classRealmManager
@Requirement private ClassRealmManager classRealmManager
-
pluginDescriptorCache
@Requirement private PluginDescriptorCache pluginDescriptorCache
-
pluginRealmCache
@Requirement private PluginRealmCache pluginRealmCache
-
pluginDependenciesResolver
@Requirement private PluginDependenciesResolver pluginDependenciesResolver
-
runtimeInformation
@Requirement private RuntimeInformation runtimeInformation
-
extensionRealmCache
@Requirement private ExtensionRealmCache extensionRealmCache
-
pluginVersionResolver
@Requirement private PluginVersionResolver pluginVersionResolver
-
pluginArtifactsCache
@Requirement private PluginArtifactsCache pluginArtifactsCache
-
extensionDescriptorBuilder
private ExtensionDescriptorBuilder extensionDescriptorBuilder
-
builder
private PluginDescriptorBuilder builder
-
-
Method Detail
-
getPluginDescriptor
public PluginDescriptor getPluginDescriptor(Plugin plugin, java.util.List<org.eclipse.aether.repository.RemoteRepository> repositories, org.eclipse.aether.RepositorySystemSession session) throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException
Description copied from interface:MavenPluginManagerRetrieves the descriptor for the specified plugin from its main artifact.- Specified by:
getPluginDescriptorin interfaceMavenPluginManager- Parameters:
plugin- The plugin whose descriptor should be retrieved, must not benull.repositories- The plugin repositories to use for resolving the plugin's main artifact, must not benull.session- The repository session to use for resolving the plugin's main artifact, must not benull.- Returns:
- The plugin descriptor, never
null. - Throws:
PluginResolutionExceptionPluginDescriptorParsingExceptionInvalidPluginDescriptorException
-
extractPluginDescriptor
private PluginDescriptor extractPluginDescriptor(Artifact pluginArtifact, Plugin plugin) throws PluginDescriptorParsingException, InvalidPluginDescriptorException
-
getPluginDescriptorLocation
private java.lang.String getPluginDescriptorLocation()
-
parsePluginDescriptor
private PluginDescriptor parsePluginDescriptor(java.io.InputStream is, Plugin plugin, java.lang.String descriptorLocation) throws PluginDescriptorParsingException
- Throws:
PluginDescriptorParsingException
-
getMojoDescriptor
public MojoDescriptor getMojoDescriptor(Plugin plugin, java.lang.String goal, java.util.List<org.eclipse.aether.repository.RemoteRepository> repositories, org.eclipse.aether.RepositorySystemSession session) throws MojoNotFoundException, PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException
Description copied from interface:MavenPluginManagerRetrieves the descriptor for the specified plugin goal from the plugin's main artifact.- Specified by:
getMojoDescriptorin interfaceMavenPluginManager- Parameters:
plugin- The plugin whose mojo descriptor should be retrieved, must not benull.goal- The simple name of the mojo whose descriptor should be retrieved, must not benull.repositories- The plugin repositories to use for resolving the plugin's main artifact, must not benull.session- The repository session to use for resolving the plugin's main artifact, must not benull.- Returns:
- The mojo descriptor, never
null. - Throws:
MojoNotFoundExceptionPluginResolutionExceptionPluginDescriptorParsingExceptionInvalidPluginDescriptorException
-
checkRequiredMavenVersion
public void checkRequiredMavenVersion(PluginDescriptor pluginDescriptor) throws PluginIncompatibleException
Description copied from interface:MavenPluginManagerVerifies the specified plugin is compatible with the current Maven runtime.- Specified by:
checkRequiredMavenVersionin interfaceMavenPluginManager- Parameters:
pluginDescriptor- The descriptor of the plugin to check, must not benull.- Throws:
PluginIncompatibleException
-
setupPluginRealm
public void setupPluginRealm(PluginDescriptor pluginDescriptor, MavenSession session, java.lang.ClassLoader parent, java.util.List<java.lang.String> imports, org.eclipse.aether.graph.DependencyFilter filter) throws PluginResolutionException, PluginContainerException
Description copied from interface:MavenPluginManagerSets up the class realm for the specified plugin. Both the class realm and the plugin artifacts that constitute it will be stored in the plugin descriptor.- Specified by:
setupPluginRealmin interfaceMavenPluginManager- Parameters:
pluginDescriptor- The plugin descriptor in which to save the class realm and the plugin artifacts, must not benull.session- The build session from which to pick the current project and repository settings, must not benull.parent- The parent class realm for the plugin, may benullto use the Maven core realm.imports- The packages/types to import from the parent realm, may benull.filter- The filter used to exclude certain plugin dependencies, may benull.- Throws:
PluginResolutionExceptionPluginContainerException
-
createPluginRealm
private void createPluginRealm(PluginDescriptor pluginDescriptor, MavenSession session, java.lang.ClassLoader parent, java.util.Map<java.lang.String,java.lang.ClassLoader> foreignImports, org.eclipse.aether.graph.DependencyFilter filter) throws PluginResolutionException, PluginContainerException
-
discoverPluginComponents
private void discoverPluginComponents(org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm, Plugin plugin, PluginDescriptor pluginDescriptor) throws PluginContainerException- Throws:
PluginContainerException
-
toAetherArtifacts
private java.util.List<org.eclipse.aether.artifact.Artifact> toAetherArtifacts(java.util.List<Artifact> pluginArtifacts)
-
toMavenArtifacts
private java.util.List<Artifact> toMavenArtifacts(org.eclipse.aether.graph.DependencyNode root, org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator nlg)
-
calcImports
private java.util.Map<java.lang.String,java.lang.ClassLoader> calcImports(MavenProject project, java.lang.ClassLoader parent, java.util.List<java.lang.String> imports)
-
getConfiguredMojo
public <T> T getConfiguredMojo(java.lang.Class<T> mojoInterface, MavenSession session, MojoExecution mojoExecution) throws PluginConfigurationException, PluginContainerExceptionDescription copied from interface:MavenPluginManagerLooks up the mojo for the specified mojo execution and populates its parameters from the configuration given by the mojo execution. The mojo/plugin descriptor associated with the mojo execution provides the class realm to lookup the mojo from. Warning: The returned mojo instance must be released viaMavenPluginManager.releaseMojo(Object, MojoExecution)when the mojo is no longer needed to free any resources allocated for it.- Specified by:
getConfiguredMojoin interfaceMavenPluginManager- Parameters:
mojoInterface- The component role of the mojo, must not benull.session- The build session in whose context the mojo will be used, must not benull.mojoExecution- The mojo execution to retrieve the mojo for, must not benull.- Returns:
- The ready-to-execute mojo, never
null. - Throws:
PluginConfigurationExceptionPluginContainerException
-
populatePluginFields
private void populatePluginFields(java.lang.Object mojo, MojoDescriptor mojoDescriptor, org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm, org.codehaus.plexus.configuration.PlexusConfiguration configuration, org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator expressionEvaluator) throws PluginConfigurationException- Throws:
PluginConfigurationException
-
validateParameters
private void validateParameters(MojoDescriptor mojoDescriptor, org.codehaus.plexus.configuration.PlexusConfiguration configuration, org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator expressionEvaluator) throws org.codehaus.plexus.component.configurator.ComponentConfigurationException, PluginParameterException
- Throws:
org.codehaus.plexus.component.configurator.ComponentConfigurationExceptionPluginParameterException
-
releaseMojo
public void releaseMojo(java.lang.Object mojo, MojoExecution mojoExecution)Description copied from interface:MavenPluginManagerReleases the specified mojo back to the container.- Specified by:
releaseMojoin interfaceMavenPluginManager- Parameters:
mojo- The mojo to release, may benull.mojoExecution- The mojo execution the mojo was originally retrieved for, must not benull.
-
setupExtensionsRealm
public ExtensionRealmCache.CacheRecord setupExtensionsRealm(MavenProject project, Plugin plugin, org.eclipse.aether.RepositorySystemSession session) throws PluginManagerException
Description copied from interface:MavenPluginManagerSets up class realm for the specified build extensions plugin.- Specified by:
setupExtensionsRealmin interfaceMavenPluginManager- Throws:
PluginManagerException
-
resolveExtensionArtifacts
private java.util.List<Artifact> resolveExtensionArtifacts(Plugin extensionPlugin, java.util.List<org.eclipse.aether.repository.RemoteRepository> repositories, org.eclipse.aether.RepositorySystemSession session) throws PluginResolutionException
- Throws:
PluginResolutionException
-
-