You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/07/01 16:55:06 UTC

svn commit: r790202 - in /maven/components/trunk: maven-core/src/main/java/org/apache/maven/lifecycle/ maven-core/src/main/java/org/apache/maven/project/ maven-model-builder/src/main/java/org/apache/maven/model/validation/ maven-model-builder/src/test/...

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()