You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2009/05/13 20:43:05 UTC
svn commit: r774487 - in /maven/components/branches/MNG-2766:
maven-compat/src/main/java/org/apache/maven/artifact/resolver/
maven-core/src/main/java/org/apache/maven/lifecycle/
maven-core/src/main/java/org/apache/maven/plugin/ maven-core/src/main/java...
Author: jvanzyl
Date: Wed May 13 18:42:56 2009
New Revision: 774487
URL: http://svn.apache.org/viewvc?rev=774487&view=rev
Log:
o another pass the the plugin manager
Modified:
maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
Modified: maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java (original)
+++ maven/components/branches/MNG-2766/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java Wed May 13 18:42:56 2009
@@ -127,10 +127,6 @@
return this;
}
- // ------------------------------------------------------------------------
- //
- // ------------------------------------------------------------------------
-
public ArtifactMetadataSource getMetadataSource()
{
return metadataSource;
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Wed May 13 18:42:56 2009
@@ -41,6 +41,7 @@
import org.apache.maven.model.Plugin;
import org.apache.maven.model.PluginExecution;
import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.PluginExecutionException;
import org.apache.maven.plugin.PluginLoaderException;
import org.apache.maven.plugin.PluginManager;
import org.apache.maven.plugin.PluginParameterExpressionEvaluator;
@@ -64,6 +65,12 @@
//TODO: Inside an IDE we are replacing the notion of our reactor with a workspace. In both of these cases
// we need to layer these as local repositories.
//TODO: Cache the lookups of the PluginDescriptors
+//TODO: check for online status in the build plan and die if necessary
+//TODO if ( mojoDescriptor.isProjectRequired() && !session.isUsingPOMsFromFilesystem() )
+//{
+// throw new PluginExecutionException( mojoExecution, project, "Cannot execute mojo: " + mojoDescriptor.getGoal()
+// + ". It requires a project with an existing pom.xml, but the build is not using one." );
+//}
/**
* @author Jason van Zyl
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginClassLoaderCache.java Wed May 13 18:42:56 2009
@@ -22,4 +22,8 @@
return pluginClassLoaders.get( key );
}
+ public int size()
+ {
+ return pluginClassLoaders.size();
+ }
}
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java Wed May 13 18:42:56 2009
@@ -148,10 +148,6 @@
{
throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e );
}
- catch ( PluginVersionResolutionException e )
- {
- throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e );
- }
catch ( PluginContainerException e )
{
throw new PluginLoaderException( plugin, "Failed to load plugin. Reason: " + e.getMessage(), e );
@@ -168,7 +164,7 @@
}
protected PluginDescriptor addPlugin( Plugin plugin, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
- throws ArtifactNotFoundException, ArtifactResolutionException, PluginVersionResolutionException, PluginContainerException, PluginVersionNotFoundException
+ throws ArtifactNotFoundException, ArtifactResolutionException, PluginContainerException, PluginVersionNotFoundException
{
Artifact pluginArtifact = repositorySystem.createPluginArtifact( plugin );
@@ -181,7 +177,14 @@
resolutionErrorHandler.throwErrors( request, result );
- ClassRealm pluginRealm = container.createChildRealm( pluginKey( plugin ) );
+ ClassRealm pluginRealm = pluginClassLoaderCache.get( constructPluginKey( plugin ) );
+
+ if ( pluginRealm != null )
+ {
+ return getPluginDescriptor( plugin );
+ }
+
+ pluginRealm = container.createChildRealm( pluginKey( plugin ) );
Set<Artifact> pluginArtifacts = getPluginArtifacts( pluginArtifact, plugin, localRepository, remoteRepositories );
@@ -196,13 +199,9 @@
// Not going to happen
}
}
-
- //pluginRealm.display();
-
+
try
{
- logger.debug( "Discovering components in realm: " + pluginRealm );
-
container.discoverComponents( pluginRealm );
}
catch ( PlexusConfigurationException e )
@@ -215,21 +214,10 @@
}
pluginClassLoaderCache.put( constructPluginKey( plugin ), pluginRealm );
-
- PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin );
-
- // We just need to keep track of the realm, if we need to augment we will wrap the realm
- pluginDescriptor.setPluginArtifact( pluginArtifact );
- pluginDescriptor.setArtifacts( new ArrayList<Artifact>( pluginArtifacts ) );
- pluginDescriptor.setClassRealm( pluginRealm );
-
- return pluginDescriptor;
+
+ return getPluginDescriptor( plugin );
}
- // plugin artifact
- // its dependencies while filtering out what's in the core
- // layering on the project level plugin dependencies
-
private Set<Artifact> getPluginArtifacts( Artifact pluginArtifact, Plugin pluginAsSpecifiedinPom, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
throws ArtifactNotFoundException, ArtifactResolutionException
{
@@ -283,23 +271,6 @@
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
- if ( mojoDescriptor.isProjectRequired() && !session.isUsingPOMsFromFilesystem() )
- {
- throw new PluginExecutionException( mojoExecution, project, "Cannot execute mojo: " + mojoDescriptor.getGoal()
- + ". It requires a project with an existing pom.xml, but the build is not using one." );
- }
-
- if ( mojoDescriptor.isOnlineRequired() && session.isOffline() )
- {
- // TODO: Should we error out, or simply warn and skip??
- throw new PluginExecutionException( mojoExecution, project, "Mojo: " + mojoDescriptor.getGoal() + " requires online mode for execution. Maven is currently offline." );
- }
-
- if ( mojoDescriptor.getDeprecated() != null )
- {
- logger.warn( "Mojo: " + mojoDescriptor.getGoal() + " is deprecated.\n" + mojoDescriptor.getDeprecated() );
- }
-
String goalName = mojoDescriptor.getFullGoalName();
Mojo mojo = null;
@@ -311,15 +282,13 @@
}
// by this time, the pluginDescriptor has had the correct realm setup from getConfiguredMojo(..)
- ClassRealm pluginRealm;
+ ClassRealm pluginRealm = pluginClassLoaderCache.get( constructPluginKey( mojoDescriptor.getPluginDescriptor() ) );
ClassRealm oldLookupRealm = container.getLookupRealm();
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
try
- {
- mojo = getConfiguredMojo( session, mojoExecution, project, false, mojoExecution );
-
- pluginRealm = pluginClassLoaderCache.get( constructPluginKey( mojoDescriptor.getPluginDescriptor() ) );
+ {
+ mojo = getConfiguredMojo( session, project, mojoExecution, pluginRealm );
Thread.currentThread().setContextClassLoader( pluginRealm );
@@ -371,15 +340,13 @@
}
}
- private Mojo getConfiguredMojo( MavenSession session, MojoExecution MojoExecution, MavenProject project, boolean report, MojoExecution mojoExecution )
+ private Mojo getConfiguredMojo( MavenSession session, MavenProject project, MojoExecution mojoExecution, ClassRealm pluginRealm )
throws PluginConfigurationException, PluginManagerException
{
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
- ClassRealm pluginRealm = pluginDescriptor.getClassRealm();
-
// We are forcing the use of the plugin realm for all lookups that might occur during
// the lifecycle that is part of the lookup. Here we are specifically trying to keep
// lookups that occur in contextualize calls in line with the right realm.
@@ -388,8 +355,6 @@
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader( pluginRealm );
- logger.debug( "Looking up mojo " + mojoDescriptor.getRoleHint() + " in realm " + pluginRealm.getId() + " - descRealmId=" + mojoDescriptor.getRealm() );
-
Mojo mojo;
try
@@ -434,7 +399,7 @@
ExpressionEvaluator expressionEvaluator = new PluginParameterExpressionEvaluator( session, mojoExecution );
- populatePluginFields( mojo, mojoDescriptor, pomConfiguration, expressionEvaluator );
+ populatePluginFields( mojo, mojoDescriptor, pluginRealm, pomConfiguration, expressionEvaluator );
Thread.currentThread().setContextClassLoader( oldClassLoader );
@@ -445,14 +410,11 @@
// Mojo Parameter Handling
// ----------------------------------------------------------------------
- private void populatePluginFields( Mojo plugin, MojoDescriptor mojoDescriptor, PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator )
+ private void populatePluginFields( Mojo mojo, MojoDescriptor mojoDescriptor, ClassRealm realm, PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator )
throws PluginConfigurationException
{
ComponentConfigurator configurator = null;
- // TODO: What is the point in using the plugin realm here instead of the core realm?
- ClassRealm realm = mojoDescriptor.getPluginDescriptor().getClassRealm();
-
try
{
String configuratorId = mojoDescriptor.getComponentConfigurator();
@@ -473,7 +435,7 @@
logger.debug( "Configuring mojo '" + mojoDescriptor.getId() + "' with " + ( configuratorId == null ? "basic" : configuratorId ) + " configurator -->" );
// This needs to be able to use methods
- configurator.configureComponent( plugin, configuration, expressionEvaluator, realm, listener );
+ configurator.configureComponent( mojo, configuration, expressionEvaluator, realm, listener );
logger.debug( "-- end configuration --" );
}
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/PluginClassLoaderCache.java Wed May 13 18:42:56 2009
@@ -16,4 +16,6 @@
void put( String key, ClassRealm pluginClassLoader );
ClassRealm get( String key );
+
+ int size();
}
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed May 13 18:42:56 2009
@@ -106,7 +106,7 @@
public MavenProject build( File pomFile, ProjectBuilderConfiguration configuration )
throws ProjectBuildingException
- {
+ {
MavenProject project = projectCache.get( pomFile.getAbsolutePath() );
if ( project != null )
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectCache.java Wed May 13 18:42:56 2009
@@ -20,4 +20,9 @@
{
projectCache.put( key, project );
}
+
+ public int size()
+ {
+ return projectCache.size();
+ }
}
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/MavenProjectCache.java Wed May 13 18:42:56 2009
@@ -5,4 +5,6 @@
MavenProject get( String absolutePath );
void put( String absolutePath, MavenProject project );
+
+ int size();
}
Modified: maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java?rev=774487&r1=774486&r2=774487&view=diff
==============================================================================
--- maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java (original)
+++ maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java Wed May 13 18:42:56 2009
@@ -112,10 +112,17 @@
throws Exception
{
ArtifactRepositoryLayout repoLayout = lookup( ArtifactRepositoryLayout.class, "legacy" );
-
- ArtifactRepository r = new DefaultArtifactRepository( "local", "file://" + localRepoDir.getAbsolutePath(),
- repoLayout );
-
+ ArtifactRepository r = new DefaultArtifactRepository( "local", "file://" + localRepoDir.getAbsolutePath(), repoLayout );
return r;
}
+
+ public void xtestLoop() throws Exception
+ {
+ while( true )
+ {
+ File f1 = getTestFile( "src/test/resources/projects/duplicate-plugins-merged-pom.xml" );
+ getProject( f1 );
+ }
+ }
+
}