Author: bentmann Date: Wed Jul 1 14:55:06 2009 New Revision: 790202 URL: http://svn.apache.org/viewvc?rev=790202&view=rev Log: [MNG-4173] Remove automatic version resolution for POM plugins
o Reduced validation error to warning because this change seems to cause troubles for many projects out there o Extended lifecylce executor to take care of non-versioned plugins Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java maven/components/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=790202&r1=790201&r2=790202&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java Wed Jul 1 14:55:06 2009 @@ -630,88 +630,96 @@ // if ( plugin.getVersion() == null ) { - File artifactMetadataFile; - - String localPath; - - // Search in the local repositiory for a version - // - // maven-metadata-local.xml - // - localPath = plugin.getGroupId().replace( '.', '/' ) + "/" + plugin.getArtifactId() + "/maven-metadata-" + session.getLocalRepository().getId() + ".xml"; - - artifactMetadataFile = new File( session.getLocalRepository().getBasedir(), localPath ); - - if ( !artifactMetadataFile.exists() /* || user requests snapshot updates */ ) - { - // Search in remote repositories for a version. - // - // maven-metadata-{central|nexus|...}.xml - // - //TODO: we should cycle through the repositories but take the repository which actually - // satisfied the prefix. - for ( ArtifactRepository repository : project.getPluginArtifactRepositories() ) - { - localPath = plugin.getGroupId().replace( '.', '/' ) + "/" + plugin.getArtifactId() + "/maven-metadata-" + repository.getId() + ".xml"; + resolvePluginVersion( plugin, session.getLocalRepository(), project.getPluginArtifactRepositories() ); + } + + return pluginManager.getMojoDescriptor( plugin, goal, session.getLocalRepository(), project.getPluginArtifactRepositories() ); + } - artifactMetadataFile = new File( session.getLocalRepository().getBasedir(), localPath ); + private void resolvePluginVersion( Plugin plugin, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) + throws PluginNotFoundException + { + File artifactMetadataFile = null; + + String localPath; + + // Search in remote repositories for a (released) version. + // + // maven-metadata-{central|nexus|...}.xml + // + //TODO: we should cycle through the repositories but take the repository which actually + // satisfied the prefix. + for ( ArtifactRepository repository : remoteRepositories ) + { + localPath = plugin.getGroupId().replace( '.', '/' ) + "/" + plugin.getArtifactId() + "/maven-metadata-" + repository.getId() + ".xml"; - if ( !artifactMetadataFile.exists() ) - { - try - { - String remotePath = plugin.getGroupId().replace( '.', '/' ) + "/" + plugin.getArtifactId() + "/maven-metadata.xml"; + artifactMetadataFile = new File( localRepository.getBasedir(), localPath ); - repositorySystem.retrieve( repository, artifactMetadataFile, remotePath, session.getRequest().getTransferListener() ); - } - catch ( TransferFailedException e ) - { - continue; - } - catch ( ResourceDoesNotExistException e ) - { - continue; - } - } + if ( !artifactMetadataFile.exists() /* || user requests snapshot updates */) + { + try + { + String remotePath = plugin.getGroupId().replace( '.', '/' ) + "/" + plugin.getArtifactId() + "/maven-metadata.xml"; - break; + repositorySystem.retrieve( repository, artifactMetadataFile, remotePath, null ); + } + catch ( TransferFailedException e ) + { + continue; + } + catch ( ResourceDoesNotExistException e ) + { + continue; } } - if ( artifactMetadataFile.exists() ) - { - try - { - Metadata pluginMetadata = readMetadata( artifactMetadataFile ); + break; + } - String release = pluginMetadata.getVersioning().getRelease(); + // Search in the local repositiory for a (development) version + // + // maven-metadata-local.xml + // + if ( artifactMetadataFile == null || !artifactMetadataFile.exists() ) + { + localPath = + plugin.getGroupId().replace( '.', '/' ) + "/" + plugin.getArtifactId() + "/maven-metadata-" + + localRepository.getId() + ".xml"; - if ( release != null ) - { - plugin.setVersion( release ); - } - else - { - String latest = pluginMetadata.getVersioning().getLatest(); - - if ( latest != null ) - { - plugin.setVersion( latest ); - } - } + artifactMetadataFile = new File( localRepository.getBasedir(), localPath ); + } + + if ( artifactMetadataFile.exists() ) + { + try + { + Metadata pluginMetadata = readMetadata( artifactMetadataFile ); + + String release = pluginMetadata.getVersioning().getRelease(); + + if ( release != null ) + { + plugin.setVersion( release ); } - catch ( RepositoryMetadataReadException e ) + else { - logger.warn( "Error reading plugin metadata: ", e ); + String latest = pluginMetadata.getVersioning().getLatest(); + + if ( latest != null ) + { + plugin.setVersion( latest ); + } } } - else + catch ( RepositoryMetadataReadException e ) { - throw new PluginNotFoundException( plugin, null ); + logger.warn( "Error reading plugin metadata: ", e ); } } - - return pluginManager.getMojoDescriptor( plugin, goal, session.getLocalRepository(), project.getPluginArtifactRepositories() ); + else + { + throw new PluginNotFoundException( plugin, null ); + } } private void injectPluginDeclarationFromProject( Plugin plugin, MavenProject project ) @@ -857,6 +865,18 @@ private void populateDefaultConfigurationForPlugin( Plugin plugin, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories ) throws LifecycleExecutionException { + if ( plugin.getVersion() == null ) + { + try + { + resolvePluginVersion( plugin, localRepository, remoteRepositories ); + } + catch ( PluginNotFoundException e ) + { + throw new LifecycleExecutionException( "Error resolving version for plugin " + plugin, e ); + } + } + for( PluginExecution pluginExecution : plugin.getExecutions() ) { for( String goal : pluginExecution.getGoals() ) Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java?rev=790202&r1=790201&r2=790202&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java Wed Jul 1 14:55:06 2009 @@ -36,6 +36,7 @@ import org.apache.maven.model.ModelBuildingException; import org.apache.maven.model.ModelBuildingRequest; import org.apache.maven.model.ModelBuildingResult; +import org.apache.maven.model.ModelProblem; import org.apache.maven.model.Profile; import org.apache.maven.model.UrlModelSource; import org.apache.maven.model.resolution.ModelResolver; @@ -102,6 +103,17 @@ throw new ProjectBuildingException( "[unknown]", "Failed to build project for " + pomFile, pomFile, e ); } + if ( localProject && !result.getProblems().isEmpty() && logger.isWarnEnabled() ) + { + logger.warn( "One or more problems were encoutered while building the effective model:" ); + for ( ModelProblem problem : result.getProblems() ) + { + logger.warn( problem.getMessage() ); + } + logger.warn( "It is highly recommended to fix these problems" + + ", otherwise the project will fail to build with future Maven versions." ); + } + Model model = result.getEffectiveModel(); File parentPomFile = result.getRawModel( result.getModelIds().get( 1 ) ).getPomFile(); Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java?rev=790202&r1=790201&r2=790202&view=diff ============================================================================== --- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java (original) +++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java Wed Jul 1 14:55:06 2009 @@ -219,7 +219,7 @@ validateStringNotEmpty( "build.plugins.plugin.groupId", result, false, p.getGroupId() ); - validateStringNotEmpty( "build.plugins.plugin.version", result, false, p.getVersion(), p.getKey() ); + validateStringNotEmpty( "build.plugins.plugin.version", result, true, p.getVersion(), p.getKey() ); } validateResources( result, build.getResources(), "build.resources.resource" ); @@ -236,7 +236,7 @@ validateStringNotEmpty( "reporting.plugins.plugin.groupId", result,false, p.getGroupId() ); - validateStringNotEmpty( "reporting.plugins.plugin.version", result, false, p.getVersion(), p.getKey() ); + validateStringNotEmpty( "reporting.plugins.plugin.version", result, true, p.getVersion(), p.getKey() ); } } Modified: maven/components/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java?rev=790202&r1=790201&r2=790202&view=diff ============================================================================== --- maven/components/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java (original) +++ maven/components/trunk/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java Wed Jul 1 14:55:06 2009 @@ -240,10 +240,10 @@ { ModelValidationResult result = validate( "missing-plugin-version-pom.xml" ); - assertEquals( 1, result.getErrors().size() ); + assertEquals( 1, result.getWarnings().size() ); assertEquals( "'build.plugins.plugin.version' is missing for org.apache.maven.plugins:maven-it-plugin", - result.getErrors().get( 0 ) ); + result.getWarnings().get( 0 ) ); } public void testMissingRepositoryId()