You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/03/11 18:27:32 UTC

svn commit: r636023 - in /maven/components/trunk/maven-project/src: main/aspect/org/apache/maven/project/aspect/ main/java/org/apache/maven/project/ main/java/org/apache/maven/project/build/model/ main/java/org/apache/maven/project/workspace/ test/java...

Author: jdcasey
Date: Tue Mar 11 10:27:29 2008
New Revision: 636023

URL: http://svn.apache.org/viewvc?rev=636023&view=rev
Log:
Pushing project workspace usage out of ProjectCacheAspect into DefaultMavenProjectBuilder and DefaultModelLineageBuilder, to make it easier to understand how these critical pieces of logic execute relative to other pieces of the project-building process, such as managed-dependency merging.

Removed:
    maven/components/trunk/maven-project/src/main/aspect/org/apache/maven/project/aspect/ProjectCacheAspect.aj
Modified:
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelAndFile.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/workspace/DefaultProjectWorkspace.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/DefaultProjectWorkspaceTest.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=636023&r1=636022&r2=636023&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Tue Mar 11 10:27:29 2008
@@ -208,10 +208,30 @@
                                              ArtifactRepository localRepository )
         throws ProjectBuildingException
     {
-        Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository );
+        String artifactKey = artifact.getId();
 
-        return buildInternal( model, localRepository, remoteArtifactRepositories, artifact.getFile(), null,
-                              false, false, false );
+        MavenProject project = null;
+        if ( !Artifact.LATEST_VERSION.equals( artifact.getVersion() ) && !Artifact.RELEASE_VERSION.equals( artifact.getVersion() ) )
+        {
+            getLogger().debug( "Checking cache for project (in buildFromRepository): " + artifactKey );
+            project = projectWorkspace.getProject( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
+        }
+
+        if ( project == null )
+        {
+            getLogger().debug( "Allowing buildFromRepository to proceed for: " + artifactKey );
+
+            Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository );
+
+            project = buildInternal( model, localRepository, remoteArtifactRepositories, artifact.getFile(), null,
+                                  false, false, false );
+        }
+        else
+        {
+            getLogger().debug( "Returning cached project: " + project );
+        }
+
+        return project;
     }
 
     private Logger logger;
@@ -442,16 +462,29 @@
                                                       ProfileManager profileManager )
         throws ProjectBuildingException
     {
-        Model model = readModel( "unknown", projectDescriptor, STRICT_MODEL_PARSING );
+        getLogger().debug( "Checking cache-hit on project (in build*): " + projectDescriptor );
 
-        MavenProject project = buildInternal( model,
-            localRepository,
-            buildArtifactRepositories( getSuperModel() ),
-            projectDescriptor,
-            profileManager,
-            STRICT_MODEL_PARSING,
-            true,
-            true );
+        MavenProject project = projectWorkspace.getProject( projectDescriptor );
+
+        if ( project == null )
+        {
+            getLogger().debug( "Allowing project-build to proceed for: " + projectDescriptor );
+
+            Model model = readModel( "unknown", projectDescriptor, STRICT_MODEL_PARSING );
+
+            project = buildInternal( model,
+                localRepository,
+                buildArtifactRepositories( getSuperModel() ),
+                projectDescriptor,
+                profileManager,
+                STRICT_MODEL_PARSING,
+                true,
+                true );
+        }
+        else
+        {
+            getLogger().debug( "Returning cached project: " + project );
+        }
 
         return project;
     }
@@ -778,6 +811,11 @@
             // Only track the file of a POM in the source tree
             project.setFile( projectDescriptor );
         }
+
+        getLogger().debug( "Caching project: " + project.getId() + " (also keyed by file: " + project.getFile() + ")" );
+
+        projectWorkspace.storeProjectByCoordinate( project );
+        projectWorkspace.storeProjectByFile( project );
 
         project.setManagedVersionMap( createManagedVersionMap( projectId, project.getDependencyManagement(), projectDescriptor ) );
 

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java?rev=636023&r1=636022&r2=636023&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/DefaultModelLineageBuilder.java Tue Mar 11 10:27:29 2008
@@ -100,7 +100,12 @@
         List currentRemoteRepositories = remoteRepositories == null ? new ArrayList()
                         : new ArrayList( remoteRepositories );
 
-        ModelAndFile current = new ModelAndFile( readModel( pom ), pom, validProfilesXmlLocation );
+        ModelAndFile current = projectWorkspace.getModelAndFile( pom );
+        if ( current == null )
+        {
+            current = new ModelAndFile( readModel( pom ), pom, validProfilesXmlLocation );
+            projectWorkspace.storeModelAndFile( current );
+        }
 
         do
         {
@@ -337,6 +342,19 @@
         {
             validateParentDeclaration( modelParent, model );
 
+            String key = modelParent.getGroupId() + ":" + modelParent.getArtifactId() + ":" + modelParent.getVersion();
+            getLogger().debug( "Checking cache for parent model-and-file instance: " + key );
+
+            result = projectWorkspace.getModelAndFile( modelParent.getGroupId(), modelParent.getArtifactId(), modelParent.getVersion() );
+
+            if ( result != null )
+            {
+                getLogger().debug( "Returning cached instance." );
+                return result;
+            }
+
+            getLogger().debug( "Allowing parent-model resolution to proceed for: " + key + " (child is: " + model.getId() + ")" );
+
             File parentPomFile = null;
 
             if ( ( modelPomFile != null ) )
@@ -363,10 +381,15 @@
                 {
                     if ( allowStubs )
                     {
-                        getLogger().debug( "DISREGARDING the error encountered while resolving artifact for: "
-                                                           + modelParent.getId()
-                                                           + ", building a stub model in its place.",
-                                           e );
+                        getLogger().warn( "An error was encountered while resolving artifact for: "
+                                          + modelParent.getId() + "\n\nError was: "
+                                          + e.getMessage() );
+
+                        if ( getLogger().isDebugEnabled() )
+                        {
+                            getLogger().debug( "Stack trace: ", e );
+                        }
+
                         parentPomFile = null;
                     }
                     else
@@ -382,7 +405,7 @@
                 {
                     getLogger().warn( "Cannot find parent POM: " + modelParent.getId()
                                       + " for child: " + model.getId()
-                                      + ". Using stub model instead." );
+                                      + ".\n\nMaven is using a stub model instead for this build." );
 
                     Model parent = new Model();
 
@@ -405,6 +428,12 @@
                 Model parent = readModel( parentPomFile );
                 result = new ModelAndFile( parent, parentPomFile, !isResolved );
             }
+        }
+
+        if ( result != null )
+        {
+            getLogger().debug( "Caching parent model-and-file: " + result );
+            projectWorkspace.storeModelAndFile( result );
         }
 
         return result;

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelAndFile.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelAndFile.java?rev=636023&r1=636022&r2=636023&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelAndFile.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/build/model/ModelAndFile.java Tue Mar 11 10:27:29 2008
@@ -37,4 +37,9 @@
         return validProfilesXmlLocation;
     }
 
+    public String toString()
+    {
+        return model.getId() + "@" + file;
+    }
+
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/workspace/DefaultProjectWorkspace.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/workspace/DefaultProjectWorkspace.java?rev=636023&r1=636022&r2=636023&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/workspace/DefaultProjectWorkspace.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/workspace/DefaultProjectWorkspace.java Tue Mar 11 10:27:29 2008
@@ -16,15 +16,16 @@
 {
 
     private MavenWorkspaceStore workspaceStore;
-//    private Logger logger;
+    private Logger logger;
 
     public DefaultProjectWorkspace()
     {
     }
 
-    protected DefaultProjectWorkspace( MavenWorkspaceStore workspaceStore )
+    protected DefaultProjectWorkspace( MavenWorkspaceStore workspaceStore, Logger logger )
     {
         this.workspaceStore = workspaceStore;
+        this.logger = logger;
     }
 
     public ModelAndFile getModelAndFile( String groupId,
@@ -35,7 +36,7 @@
 
         String key = createCacheKey( groupId, artifactId, version );
 
-//        getLogger().debug( "Retrieving ModelAndFile instance for: " + key + " from workspace." );
+        getLogger().debug( "Retrieving ModelAndFile instance for: " + key + " from workspace." );
         return (ModelAndFile) cache.get( key );
     }
 
@@ -45,7 +46,7 @@
 
         Object pathKey = resolvePathKey( modelFile );
 
-//        getLogger().debug( "Retrieving ModelAndFile instance for: " + pathKey + " from workspace." );
+        getLogger().debug( "Retrieving ModelAndFile instance for: " + pathKey + " from workspace." );
         return (ModelAndFile) cache.get( pathKey );
     }
 
@@ -67,7 +68,7 @@
 
         Object pathKey = resolvePathKey( projectFile );
 
-//        getLogger().debug( "Retrieving MavenProject instance for: " + pathKey + " from workspace." );
+        getLogger().debug( "Retrieving MavenProject instance for: " + pathKey + " from workspace." );
         return (MavenProject) cache.get( pathKey );
     }
 
@@ -79,7 +80,7 @@
 
         String key = createCacheKey( groupId, artifactId, version );
 
-//        getLogger().debug( "Retrieving MavenProject instance for: " + key + " from workspace." );
+        getLogger().debug( "Retrieving MavenProject instance for: " + key + " from workspace." );
         return (MavenProject) cache.get( key );
     }
 
@@ -89,7 +90,7 @@
 
         Object pathKey = resolvePathKey( modelAndFile.getFile() );
 
-//        getLogger().debug( "Storing ModelAndFile instance under: " + pathKey + " in workspace." );
+        getLogger().debug( "Storing ModelAndFile instance under: " + pathKey + " in workspace." );
         cache.put( pathKey, modelAndFile );
 
         cache = workspaceStore.getWorkspaceCache( ProjectWorkspace.MODEL_AND_FILE_BYGAV_KEY );
@@ -97,7 +98,7 @@
         Model model = modelAndFile.getModel();
         String key = createCacheKey( model.getGroupId(), model.getArtifactId(), model.getVersion() );
 
-//        getLogger().debug( "Storing ModelAndFile instance under: " + key + " in workspace." );
+        getLogger().debug( "Storing ModelAndFile instance under: " + key + " in workspace." );
         cache.put( key, modelAndFile );
     }
 
@@ -111,7 +112,7 @@
 
         Object pathKey = resolvePathKey( project.getFile() );
 
-//        getLogger().debug( "Storing MavenProject instance under: " + pathKey + " in workspace." );
+        getLogger().debug( "Storing MavenProject instance under: " + pathKey + " in workspace." );
         cache.put( pathKey, project );
     }
 
@@ -121,7 +122,7 @@
 
         String key = createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
 
-//        getLogger().debug( "Storing MavenProject instance under: " + key + " in workspace." );
+        getLogger().debug( "Storing MavenProject instance under: " + key + " in workspace." );
         cache.put( key, project );
     }
 
@@ -130,19 +131,19 @@
         return groupId + ":" + artifactId + ":" + version;
     }
 
-//    protected Logger getLogger()
-//    {
+    protected Logger getLogger()
+    {
 //        if ( logger == null )
 //        {
 //            logger = new ConsoleLogger( Logger.LEVEL_INFO, "internal" );
 //        }
-//
-//        return logger;
-//    }
+
+        return logger;
+    }
 
     public void enableLogging( Logger logger )
     {
-//        this.logger = logger;
+        this.logger = logger;
     }
 
 }

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/DefaultProjectWorkspaceTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/DefaultProjectWorkspaceTest.java?rev=636023&r1=636022&r2=636023&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/DefaultProjectWorkspaceTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/DefaultProjectWorkspaceTest.java Tue Mar 11 10:27:29 2008
@@ -4,6 +4,8 @@
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.build.model.ModelAndFile;
 import org.apache.maven.workspace.DefaultMavenWorkspaceStore;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
 
 import java.io.File;
 
@@ -17,7 +19,7 @@
     {
         ModelAndFile maf = newModelAndFile( "group", "artifact", "1" );
 
-        DefaultProjectWorkspace ws = new DefaultProjectWorkspace( new DefaultMavenWorkspaceStore() );
+        DefaultProjectWorkspace ws = newWorkspace();
         ws.storeModelAndFile( maf );
 
         ModelAndFile r1 = ws.getModelAndFile( maf.getFile() );
@@ -29,11 +31,17 @@
         assertSame( maf, r2 );
     }
 
+    private DefaultProjectWorkspace newWorkspace()
+    {
+        DefaultProjectWorkspace ws = new DefaultProjectWorkspace( new DefaultMavenWorkspaceStore(), new ConsoleLogger( Logger.LEVEL_INFO, "test" ) );
+        return ws;
+    }
+
     public void testStoreAndRetrieveProjectByFile_CoordinateRetrievalReturnsNull()
     {
         MavenProject project = newProject( "group", "artifact", "1" );
 
-        DefaultProjectWorkspace ws = new DefaultProjectWorkspace( new DefaultMavenWorkspaceStore() );
+        DefaultProjectWorkspace ws = newWorkspace();
         ws.storeProjectByFile( project );
 
         assertSame( project, ws.getProject( project.getFile() ) );
@@ -44,7 +52,7 @@
     {
         MavenProject project = newProject( "group", "artifact", "1" );
 
-        DefaultProjectWorkspace ws = new DefaultProjectWorkspace( new DefaultMavenWorkspaceStore() );
+        DefaultProjectWorkspace ws = newWorkspace();
         ws.storeProjectByCoordinate( project );
 
         assertNull( ws.getProject( project.getFile() ) );

Modified: maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java?rev=636023&r1=636022&r2=636023&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java (original)
+++ maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/workspace/ModelAndFileCachingTest.java Tue Mar 11 10:27:29 2008
@@ -27,6 +27,9 @@
 public class ModelAndFileCachingTest
     extends PlexusTestCase
 {
+
+    private static final String MY_PKG = ModelAndFileCachingTest.class.getPackage().getName().replace( '.', '/' );
+
     private static final String MY_PATH = ModelAndFileCachingTest.class.getName()
                                                                        .replace( '.', '/' )
                                           + ".class";
@@ -224,11 +227,18 @@
     private File getFile( String path )
     {
         ClassLoader cloader = Thread.currentThread().getContextClassLoader();
-        URL myRes = cloader.getResource( MY_PATH );
+        URL res = cloader.getResource( MY_PATH );
+
+        File myFile = new File( res.getPath() );
 
-        File myFile = new File( myRes.getPath() );
+        File result = new File( myFile.getParentFile(), path );
+
+        if ( !result.exists() )
+        {
+            result = new File( "src/test/resources", MY_PKG + "/" + path );
+        }
 
-        return new File( myFile.getParentFile(), path );
+        return result;
     }
 
 }