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 PluginDescriptorBuilder
builder
private ClassRealmManager
classRealmManager
private java.util.List<MavenPluginConfigurationValidator>
configurationValidators
private org.codehaus.plexus.PlexusContainer
container
private ExtensionDescriptorBuilder
extensionDescriptorBuilder
private ExtensionRealmCache
extensionRealmCache
static java.lang.String
KEY_EXTENSIONS_REALMS
PluginId => ExtensionRealmCache.CacheRecord map MavenProject context value key.private org.codehaus.plexus.logging.Logger
logger
private org.codehaus.plexus.logging.LoggerManager
loggerManager
private PluginArtifactsCache
pluginArtifactsCache
private PluginDependenciesResolver
pluginDependenciesResolver
private PluginDescriptorCache
pluginDescriptorCache
private PluginRealmCache
pluginRealmCache
private PluginValidationManager
pluginValidationManager
private PluginVersionResolver
pluginVersionResolver
private RuntimeInformation
runtimeInformation
-
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)
void
checkRequiredMavenVersion(PluginDescriptor pluginDescriptor)
Verifies the specified plugin is compatible with the current Maven runtime.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)
private void
discoverPluginComponents(org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm, Plugin plugin, PluginDescriptor pluginDescriptor)
private PluginDescriptor
extractPluginDescriptor(Artifact pluginArtifact, Plugin plugin)
<T> T
getConfiguredMojo(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.MojoDescriptor
getMojoDescriptor(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.PluginDescriptor
getPluginDescriptor(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.String
getPluginDescriptorLocation()
private PluginDescriptor
parsePluginDescriptor(java.io.InputStream is, Plugin plugin, java.lang.String descriptorLocation)
private void
populateMojoExecutionFields(java.lang.Object mojo, java.lang.String executionId, MojoDescriptor mojoDescriptor, org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm, org.codehaus.plexus.configuration.PlexusConfiguration configuration, org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator expressionEvaluator)
void
releaseMojo(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.CacheRecord
setupExtensionsRealm(MavenProject project, Plugin plugin, org.eclipse.aether.RepositorySystemSession session)
Sets up class realm for the specified build extensions plugin.void
setupPluginRealm(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 void
validateParameters(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
-
configurationValidators
@Requirement private java.util.List<MavenPluginConfigurationValidator> configurationValidators
-
pluginValidationManager
@Requirement private PluginValidationManager pluginValidationManager
-
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:MavenPluginManager
Retrieves the descriptor for the specified plugin from its main artifact.- Specified by:
getPluginDescriptor
in 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:
PluginResolutionException
PluginDescriptorParsingException
InvalidPluginDescriptorException
-
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:MavenPluginManager
Retrieves the descriptor for the specified plugin goal from the plugin's main artifact.- Specified by:
getMojoDescriptor
in 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:
MojoNotFoundException
PluginResolutionException
PluginDescriptorParsingException
InvalidPluginDescriptorException
-
checkRequiredMavenVersion
public void checkRequiredMavenVersion(PluginDescriptor pluginDescriptor) throws PluginIncompatibleException
Description copied from interface:MavenPluginManager
Verifies the specified plugin is compatible with the current Maven runtime.- Specified by:
checkRequiredMavenVersion
in 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:MavenPluginManager
Sets 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:
setupPluginRealm
in 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 benull
to 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:
PluginResolutionException
PluginContainerException
-
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, PluginContainerException
Description copied from interface:MavenPluginManager
Looks 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:
getConfiguredMojo
in 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:
PluginConfigurationException
PluginContainerException
-
populateMojoExecutionFields
private void populateMojoExecutionFields(java.lang.Object mojo, java.lang.String executionId, 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.ComponentConfigurationException
PluginParameterException
-
releaseMojo
public void releaseMojo(java.lang.Object mojo, MojoExecution mojoExecution)
Description copied from interface:MavenPluginManager
Releases the specified mojo back to the container.- Specified by:
releaseMojo
in 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:MavenPluginManager
Sets up class realm for the specified build extensions plugin.- Specified by:
setupExtensionsRealm
in 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
-
-