Author: jvanzyl Date: Wed Apr 1 04:01:49 2009 New Revision: 760775 URL: http://svn.apache.org/viewvc?rev=760775&view=rev Log: o trying to isolate the plugin dependency downloading from the project dependency downloading so that I can separate it out of the plugin manager
Modified: maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java 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=760775&r1=760774&r2=760775&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 Apr 1 04:01:49 2009 @@ -20,8 +20,6 @@ import java.io.StringReader; import java.net.MalformedURLException; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashSet; @@ -195,8 +193,6 @@ checkRequiredMavenVersion( plugin, pluginProject, localRepository, project.getRemoteArtifactRepositories() ); - checkPluginDependencySpec( plugin, pluginProject ); - pluginArtifact = project.replaceWithActiveArtifact( pluginArtifact ); ArtifactResolutionRequest request = new ArtifactResolutionRequest( pluginArtifact, localRepository, project.getRemoteArtifactRepositories() ); @@ -273,11 +269,8 @@ throw new InvalidPluginException( "Plugin '" + plugin + "' is invalid: " + e.getMessage(), ee ); } - /* get plugin managed versions */ Map<String,Artifact> pluginManagedDependencies = new HashMap<String,Artifact>(); - - // This is really crappy that we have to do this. The repository system should deal with this. The retrieval of the transitive dependencies. - + List<Artifact> pluginArtifacts = new ArrayList<Artifact>(); try @@ -345,9 +338,7 @@ // ---------------------------------------------------------------------- // Mojo execution // ---------------------------------------------------------------------- - - // We should assume that We've already loaded the plugin in question. - + public void executeMojo( MavenSession session, MojoExecution mojoExecution ) throws MojoFailureException, PluginExecutionException, PluginConfigurationException { @@ -377,29 +368,11 @@ project.setBuild( model.getBuild() ); if ( mojoDescriptor.isDependencyResolutionRequired() != null ) - { - Collection<MavenProject> projects; - - if ( mojoDescriptor.isAggregator() ) - { - projects = session.getSortedProjects(); - } - else - { - projects = Collections.singleton( project ); - } - - //!!jvz What is this? We resolveTransitiveDependencies() and then a line later downDependencies()? That can't be right. We should also already - // know at this point that what we need to execute can't be found. This is the wrong time to find this out. - + { try { - for ( MavenProject p : projects ) - { - resolveTransitiveDependencies( session, repositorySystem, mojoDescriptor.isDependencyResolutionRequired(), p, mojoDescriptor.isAggregator() ); - } - - downloadDependencies( project, session, repositorySystem ); + // mojoDescriptor.isDependencyResolutionRequired() is actually the scope of the dependency resolution required, not a boolean ... yah. + downloadDependencies( session, mojoDescriptor.isDependencyResolutionRequired() ); } catch ( ArtifactResolutionException e ) { @@ -736,7 +709,7 @@ for ( int i = 0; i < parameters.size(); i++ ) { - Parameter parameter = (Parameter) parameters.get( i ); + Parameter parameter = parameters.get( i ); if ( parameter.isRequired() ) { @@ -806,7 +779,7 @@ for ( int i = 0; i < parameters.size(); i++ ) { - Parameter parameter = (Parameter) parameters.get( i ); + Parameter parameter = parameters.get( i ); // the key for the configuration map we're building. String key = parameter.getName(); @@ -1108,9 +1081,11 @@ // Artifact resolution // ---------------------------------------------------------------------- - protected void resolveTransitiveDependencies( MavenSession context, RepositorySystem repositorySystem, String scope, MavenProject project, boolean isAggregator ) + protected void resolveTransitiveDependencies( MavenSession session, String scope ) throws ArtifactResolutionException, ArtifactNotFoundException, InvalidDependencyVersionException { + MavenProject project = session.getCurrentProject(); + // TODO: such a call in MavenMetadataSource too - packaging not really the intention of type Artifact artifact = repositorySystem.createArtifact( project.getGroupId(), project.getArtifactId(), project.getVersion(), null, project.getPackaging() ); @@ -1136,7 +1111,7 @@ .setArtifact( artifact ) .setResolveRoot( false ) .setArtifactDependencies( project.getDependencyArtifacts() ) - .setLocalRepository( context.getLocalRepository() ) + .setLocalRepository( session.getLocalRepository() ) .setRemoteRepostories( project.getRemoteArtifactRepositories() ) .setManagedVersionMap( project.getManagedVersionMap() ) .setFilter( filter ); @@ -1152,20 +1127,20 @@ // Artifact downloading // ---------------------------------------------------------------------- - private void downloadDependencies( MavenProject project, MavenSession context, RepositorySystem repositorySystem ) - throws ArtifactResolutionException, ArtifactNotFoundException - { - ArtifactRepository localRepository = context.getLocalRepository(); - List<ArtifactRepository> remoteArtifactRepositories = project.getRemoteArtifactRepositories(); + private void downloadDependencies( MavenSession session, String scope ) + throws ArtifactResolutionException, ArtifactNotFoundException, InvalidDependencyVersionException + { + resolveTransitiveDependencies( session, scope ); + + ArtifactRepository localRepository = session.getLocalRepository(); + List<ArtifactRepository> remoteArtifactRepositories = session.getCurrentProject().getRemoteArtifactRepositories(); - for ( Iterator<Artifact> it = project.getArtifacts().iterator(); it.hasNext(); ) + for ( Artifact artifact : session.getCurrentProject().getArtifacts() ) { - Artifact artifact = (Artifact) it.next(); - repositorySystem.resolve( new ArtifactResolutionRequest( artifact, localRepository, remoteArtifactRepositories ) ); } } - + private static String interpolateXmlString( String xml, List<InterpolatorProperty> interpolatorProperties ) throws IOException { @@ -1254,34 +1229,6 @@ plugin.setVersion( version ); } - // We need to strip out the methods in here for a validation method. - public Artifact resolvePluginArtifact( Plugin plugin, MavenProject project, MavenSession session ) - throws PluginManagerException, InvalidPluginException, PluginVersionResolutionException, ArtifactResolutionException, ArtifactNotFoundException - { - logger.debug( "Resolving plugin artifact " + plugin.getKey() + " from " + project.getRemoteArtifactRepositories() ); - - ArtifactRepository localRepository = session.getLocalRepository(); - - // We need the POM for the actually plugin project so we can look at the prerequisite element. - MavenProject pluginProject = buildPluginProject( plugin, localRepository, project.getRemoteArtifactRepositories() ); - - Artifact pluginArtifact = repositorySystem.createPluginArtifact( plugin ); - - checkRequiredMavenVersion( plugin, pluginProject, localRepository, project.getRemoteArtifactRepositories() ); - - checkPluginDependencySpec( plugin, pluginProject ); - - pluginArtifact = project.replaceWithActiveArtifact( pluginArtifact ); - - ArtifactResolutionRequest request = new ArtifactResolutionRequest( pluginArtifact, localRepository, project.getRemoteArtifactRepositories() ); - - ArtifactResolutionResult result = repositorySystem.resolve( request ); - - resolutionErrorHandler.throwErrors( request, result ); - - return pluginArtifact; - } - public MavenProject buildPluginProject( Plugin plugin, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) throws InvalidPluginException { @@ -1298,12 +1245,7 @@ } } - /** - * @param pluginProject - * @todo would be better to store this in the plugin descriptor, but then it won't be available - * to the version manager which executes before the plugin is instantiated - */ - public void checkRequiredMavenVersion( Plugin plugin, MavenProject pluginProject, ArtifactRepository localRepository, List remoteRepositories ) + public void checkRequiredMavenVersion( Plugin plugin, MavenProject pluginProject, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) throws PluginVersionResolutionException, InvalidPluginException { // if we don't have the required Maven version, then ignore an update @@ -1317,24 +1259,8 @@ } } } - - public void checkPluginDependencySpec( Plugin plugin, MavenProject pluginProject ) - throws InvalidPluginException - { - ArtifactFilter filter = new ScopeArtifactFilter( "runtime" ); - try - { - repositorySystem.createArtifacts( pluginProject.getDependencies(), null, filter, pluginProject ); - } - catch ( VersionNotFoundException e ) - { - throw new InvalidPluginException( "Plugin: " + plugin.getKey() + " has a dependency with an invalid version." ); - } - } - - // Plugin Mapping Manager - public org.apache.maven.model.Plugin getByPrefix( String pluginPrefix, List groupIds, List pluginRepositories, ArtifactRepository localRepository ) + public org.apache.maven.model.Plugin getByPrefix( String pluginPrefix, List<String> groupIds, List<ArtifactRepository> pluginRepositories, ArtifactRepository localRepository ) { // if not found, try from the remote repository if ( !pluginDefinitionsByPrefix.containsKey( pluginPrefix ) ) @@ -1344,7 +1270,7 @@ loadPluginMappings( groupIds, pluginRepositories, localRepository ); } - org.apache.maven.model.Plugin result = (org.apache.maven.model.Plugin) pluginDefinitionsByPrefix.get( pluginPrefix ); + org.apache.maven.model.Plugin result = pluginDefinitionsByPrefix.get( pluginPrefix ); if ( result == null ) { @@ -1354,76 +1280,51 @@ return result; } - private void loadPluginMappings( List groupIds, List pluginRepositories, ArtifactRepository localRepository ) + private void loadPluginMappings( List<String> groupIds, List<ArtifactRepository> pluginRepositories, ArtifactRepository localRepository ) { - List pluginGroupIds = new ArrayList( groupIds ); + List<String> pluginGroupIds = new ArrayList<String>( groupIds ); - // TODO: use constant - if ( !pluginGroupIds.contains( "org.apache.maven.plugins" ) ) + for ( String groupId : pluginGroupIds ) { - pluginGroupIds.add( "org.apache.maven.plugins" ); - } - if ( !pluginGroupIds.contains( "org.codehaus.mojo" ) ) - { - pluginGroupIds.add( "org.codehaus.mojo" ); - } - - for ( Iterator it = pluginGroupIds.iterator(); it.hasNext(); ) - { - String groupId = (String) it.next(); - logger.debug( "Loading plugin prefixes from group: " + groupId ); try { - loadPluginMappings( groupId, pluginRepositories, localRepository ); - } - catch ( RepositoryMetadataResolutionException e ) - { - logger.warn( "Cannot resolve plugin-mapping metadata for groupId: " + groupId + " - IGNORING." ); - - logger.debug( "Error resolving plugin-mapping metadata for groupId: " + groupId + ".", e ); - } - } - } - - //!!jvz This should not be here, it's part of pre-processing. - private void loadPluginMappings( String groupId, List pluginRepositories, ArtifactRepository localRepository ) - throws RepositoryMetadataResolutionException - { - RepositoryMetadata metadata = new GroupRepositoryMetadata( groupId ); - - logger.debug( "Checking repositories:\n" + pluginRepositories + "\n\nfor plugin prefix metadata: " + groupId ); - - repositoryMetadataManager.resolve( metadata, pluginRepositories, localRepository ); - - Metadata repoMetadata = metadata.getMetadata(); - - if ( repoMetadata != null ) - { - for ( Iterator pluginIterator = repoMetadata.getPlugins().iterator(); pluginIterator.hasNext(); ) - { - org.apache.maven.artifact.repository.metadata.Plugin mapping = (org.apache.maven.artifact.repository.metadata.Plugin) pluginIterator.next(); + RepositoryMetadata metadata = new GroupRepositoryMetadata( groupId ); - logger.debug( "Found plugin: " + mapping.getName() + " with prefix: " + mapping.getPrefix() ); - - String prefix = mapping.getPrefix(); + repositoryMetadataManager.resolve( metadata, pluginRepositories, localRepository ); - //if the prefix has already been found, don't add it again. - //this is to preserve the correct ordering of prefix searching (MNG-2926) - if ( !pluginDefinitionsByPrefix.containsKey( prefix ) ) + Metadata repoMetadata = metadata.getMetadata(); + + if ( repoMetadata != null ) { - String artifactId = mapping.getArtifactId(); + for ( org.apache.maven.artifact.repository.metadata.Plugin mapping : repoMetadata.getPlugins() ) + { + String prefix = mapping.getPrefix(); + + //if the prefix has already been found, don't add it again. + //this is to preserve the correct ordering of prefix searching (MNG-2926) + if ( !pluginDefinitionsByPrefix.containsKey( prefix ) ) + { + String artifactId = mapping.getArtifactId(); - org.apache.maven.model.Plugin plugin = new org.apache.maven.model.Plugin(); + Plugin plugin = new Plugin(); - plugin.setGroupId( metadata.getGroupId() ); + plugin.setGroupId( metadata.getGroupId() ); - plugin.setArtifactId( artifactId ); + plugin.setArtifactId( artifactId ); - pluginDefinitionsByPrefix.put( prefix, plugin ); + pluginDefinitionsByPrefix.put( prefix, plugin ); + } + } } } + catch ( RepositoryMetadataResolutionException e ) + { + logger.warn( "Cannot resolve plugin-mapping metadata for groupId: " + groupId + " - IGNORING." ); + + logger.debug( "Error resolving plugin-mapping metadata for groupId: " + groupId + ".", e ); + } } - } + } public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, MavenSession session ) throws PluginLoaderException Modified: maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java?rev=760775&r1=760774&r2=760775&view=diff ============================================================================== --- maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java (original) +++ maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java Wed Apr 1 04:01:49 2009 @@ -107,6 +107,50 @@ pluginManager.executeMojo( session, mojoExecution ); } + public void testMojoConfigurationIsMergedCorrectly() + throws Exception + { + } + + /** + * The case where the user wants to specify an alternate version of the underlying tool. Common case + * is in the Antlr plugin which comes bundled with a version of Antlr but the user often times needs + * to use a specific version. We need to make sure the version that they specify takes precedence. + */ + public void testMojoWhereInternallyStatedDependencyIsOverriddenByProject() + throws Exception + { + } + + /** + * The case where you have a plugin in the current build that you want to be used on projects in + * the current build. + */ + public void testMojoThatIsPresentInTheCurrentBuild() + throws Exception + { + } + + /** + * This is the case where the Mojo wants to execute on every project and then do something at the end + * with the results of each project. + */ + public void testAggregatorMojo() + throws Exception + { + } + + /** + * This is the case where a Mojo needs the lifecycle run to a certain phase before it can do + * anything useful. + */ + public void testMojoThatRequiresExecutionToAGivenPhaseBeforeExecutingItself() + throws Exception + { + } + + // test that mojo which does not require dependency resolution trigger no downloading of dependencies + // ----------------------------------------------------------------------------------------------- // Testing help // -----------------------------------------------------------------------------------------------