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 2006/01/21 17:36:10 UTC

svn commit: r371079 - in /maven/components/trunk: maven-core-it/README.txt maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Author: jvanzyl
Date: Sat Jan 21 08:36:06 2006
New Revision: 371079

URL: http://svn.apache.org/viewcvs?rev=371079&view=rev
Log:
[MNG-1980] Removing the duplicate ID, the reactor will catch duplicate IDs in a single build so it doesn't not need
           to be checked for in the project builder. I have removed the model caching for now while I'm refactoring
           the project builder. The plan is to break the 1000+ lines down into its constituent components and use
           a pipeline to build up the project.


Modified:
    maven/components/trunk/maven-core-it/README.txt
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Modified: maven/components/trunk/maven-core-it/README.txt
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/README.txt?rev=371079&r1=371078&r2=371079&view=diff
==============================================================================
--- maven/components/trunk/maven-core-it/README.txt (original)
+++ maven/components/trunk/maven-core-it/README.txt Sat Jan 21 08:36:06 2006
@@ -240,7 +240,7 @@
 it0087: Verify that a project-level plugin dependency class can be loaded from both the plugin classloader
         and the context classloader available to the plugin.
 
-it0088: Test path translation
+it0088: Test path translation.
 
 it0089: Test that Checkstyle PackageNamesLoader.loadModuleFactory(..) method will complete as-is with
         the context classloader available to the plugin.

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=371079&r1=371078&r2=371079&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 Sat Jan 21 08:36:06 2006
@@ -120,6 +120,7 @@
         if ( goals.isEmpty() && rootProject != null )
         {
             String goal = rootProject.getDefaultGoal();
+
             if ( goal != null )
             {
                 goals = Collections.singletonList( goal );
@@ -170,6 +171,7 @@
             try
             {
                 Map handlers = findArtifactTypeHandlers( project, session.getSettings(), session.getLocalRepository() );
+
                 artifactHandlerManager.addHandlers( handlers );
             }
             catch ( PluginNotFoundException e )
@@ -179,8 +181,11 @@
         }
     }
 
-    private void executeTaskSegments( List taskSegments, ReactorManager rm, MavenSession session,
-                                      MavenProject rootProject, EventDispatcher dispatcher )
+    private void executeTaskSegments( List taskSegments,
+                                      ReactorManager rm,
+                                      MavenSession session,
+                                      MavenProject rootProject,
+                                      EventDispatcher dispatcher )
         throws LifecycleExecutionException, BuildFailureException
     {
         for ( Iterator it = taskSegments.iterator(); it.hasNext(); )
@@ -206,6 +211,7 @@
                     long buildStartTime = System.currentTimeMillis();
 
                     String target = rootProject.getId() + " ( " + segment + " )";
+
                     dispatcher.dispatchStart( event, target );
 
                     // only call once, with the top-level project (assumed to be provided as a parameter)...
@@ -213,8 +219,7 @@
                     {
                         String task = (String) goalIterator.next();
 
-                        executeGoalAndHandleFailures( task, session, rootProject, dispatcher, event, rm, buildStartTime,
-                                                      target );
+                        executeGoalAndHandleFailures( task, session, rootProject, dispatcher, event, rm, buildStartTime,target );
                     }
 
                     rm.registerBuildSuccess( rootProject, System.currentTimeMillis() - buildStartTime );
@@ -229,8 +234,7 @@
 
                     getLogger().info( "  " + segment );
 
-                    getLogger().info(
-                        "This project has been banned from further executions due to previous failures." );
+                    getLogger().info("This project has been banned from further executions due to previous failures." );
 
                     line();
                 }
@@ -283,8 +287,7 @@
 
                         getLogger().info( "  " + segment );
 
-                        getLogger().info(
-                            "This project has been banned from further executions due to previous failures." );
+                        getLogger().info( "This project has been banned from further executions due to previous failures." );
 
                         line();
                     }
@@ -293,9 +296,14 @@
         }
     }
 
-    private void executeGoalAndHandleFailures( String task, MavenSession session, MavenProject project,
-                                               EventDispatcher dispatcher, String event, ReactorManager rm,
-                                               long buildStartTime, String target )
+    private void executeGoalAndHandleFailures( String task,
+                                               MavenSession session,
+                                               MavenProject project,
+                                               EventDispatcher dispatcher,
+                                               String event,
+                                               ReactorManager rm,
+                                               long buildStartTime,
+                                               String target )
         throws BuildFailureException, LifecycleExecutionException
     {
         try

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=371079&r1=371078&r2=371079&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 Sat Jan 21 08:36:06 2006
@@ -93,6 +93,40 @@
 import java.util.Map;
 import java.util.Set;
 
+/*:apt
+
+ -----
+ POM lifecycle
+ -----
+
+POM Lifecycle
+
+ Order of operations when building a POM
+
+ * inheritance
+ * path translation
+ * interpolation
+ * defaults injection
+
+ Current processing is:
+
+ * inheritance
+ * interpolation
+ * defaults injection
+ * path translation
+
+ I'm not sure how this is working at all ... i think i have a case where this is failing but i need to
+ encapsulate as a test so i can fix it. Also need to think of the in working build directory versus looking
+ things up from the repository i.e buildFromSource vs buildFromRepository.
+
+Notes
+
+ * when the model is read it may not have a groupId, as it must be inherited
+
+ * the inheritance assembler must use models that are unadulterated!
+
+*/
+
 /**
  * @version $Id: DefaultMavenProjectBuilder.java,v 1.37 2005/03/08 01:55:22
  *          trygvis Exp $
@@ -118,6 +152,8 @@
 
     private ModelValidator validator;
 
+    private Map projectCache = new HashMap();
+
     // TODO: make it a component
     private MavenXpp3Reader modelReader;
 
@@ -137,12 +173,8 @@
 
     private WagonManager wagonManager;
 
-    private final Map modelCache = new HashMap();
-
     public static final String MAVEN_MODEL_VERSION = "4.0.0";
 
-    private Map projectCache = new HashMap();
-
     public void initialize()
     {
         modelReader = new MavenXpp3Reader();
@@ -152,18 +184,118 @@
     // MavenProjectBuilder Implementation
     // ----------------------------------------------------------------------
 
-    public MavenProject buildWithDependencies( File projectDescriptor, ArtifactRepository localRepository,
+    public MavenProject build( File projectDescriptor, ArtifactRepository localRepository, ProfileManager profileManager )
+        throws ProjectBuildingException
+    {
+        return buildFromSourceFileInternal( projectDescriptor, localRepository, profileManager, true );
+    }
+
+    public MavenProject build( File projectDescriptor,
+                               ArtifactRepository localRepository,
+                               ProfileManager profileManager,
+                               boolean checkDistributionManagementStatus )
+        throws ProjectBuildingException
+    {
+        return buildFromSourceFileInternal( projectDescriptor, localRepository, profileManager, checkDistributionManagementStatus );
+    }
+
+    // jvz:note
+    // When asked for something from the repository are we getting it from the reactor? Yes, when using this call
+    // we are assuming that the reactor has been run and we have collected the projects required to satisfy it0042
+    // which means the projects in the reactor are required for finding classes in <project>/target/classes. Not
+    // sure this is ideal. I remove all caching from the builder and all reactor related ITs which assume
+    // access to simbling project resources failed.
+    public MavenProject buildFromRepository( Artifact artifact,
+                                             List remoteArtifactRepositories,
+                                             ArtifactRepository localRepository,
+                                             boolean allowStubModel )
+        throws ProjectBuildingException
+    {
+        String cacheKey = createCacheKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
+
+        MavenProject project = (MavenProject) projectCache.get( cacheKey );
+
+        if ( project != null )
+        {
+            return project;
+        }
+
+        Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository, allowStubModel );
+
+        return buildInternal( "Artifact [" + artifact + "]", model, localRepository, remoteArtifactRepositories, null, null, false );
+    }
+
+    public MavenProject buildFromRepository( Artifact artifact,
+                                             List remoteArtifactRepositories,
+                                             ArtifactRepository localRepository )
+        throws ProjectBuildingException
+    {
+        return buildFromRepository( artifact, remoteArtifactRepositories, localRepository, true );
+    }
+
+    // what is using this externally? jvz.
+    public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
+        throws ProjectBuildingException
+    {
+        Model superModel = getSuperModel();
+
+        superModel.setGroupId( STANDALONE_SUPERPOM_GROUPID );
+
+        superModel.setArtifactId( STANDALONE_SUPERPOM_ARTIFACTID );
+
+        superModel.setVersion( STANDALONE_SUPERPOM_VERSION );
+
+        ProfileManager profileManager = new DefaultProfileManager( container );
+
+        List activeProfiles;
+
+        profileManager.addProfiles( superModel.getProfiles() );
+
+        String projectId = safeVersionlessKey( STANDALONE_SUPERPOM_GROUPID, STANDALONE_SUPERPOM_ARTIFACTID );
+
+        activeProfiles = injectActiveProfiles( profileManager, superModel );
+
+        MavenProject project = new MavenProject( superModel );
+
+        project.setActiveProfiles( activeProfiles );
+
+        project.setOriginalModel( superModel );
+
+        try
+        {
+            project = processProjectLogic( "<Super-POM>", project, null, null, true );
+
+            project.setExecutionRoot( true );
+
+            return project;
+        }
+        catch ( ModelInterpolationException e )
+        {
+            throw new ProjectBuildingException( projectId, e.getMessage(), e );
+        }
+        catch ( InvalidRepositoryException e )
+        {
+            throw new ProjectBuildingException( projectId, e.getMessage(), e );
+        }
+    }
+
+    public MavenProject buildWithDependencies( File projectDescriptor,
+                                               ArtifactRepository localRepository,
                                                ProfileManager profileManager )
         throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException
     {
         return buildWithDependencies( projectDescriptor, localRepository, profileManager, null );
     }
 
+    // note:jvz This was added for the embedder.
+
     /**
      * @todo move to metadatasource itself?
      */
-    public MavenProject buildWithDependencies( File projectDescriptor, ArtifactRepository localRepository,
-                                               ProfileManager profileManager, TransferListener transferListener )
+    public MavenProject buildWithDependencies( File projectDescriptor,
+                                               ArtifactRepository localRepository,
+                                               ProfileManager profileManager,
+                                               TransferListener transferListener )
         throws ProjectBuildingException, ArtifactResolutionException, ArtifactNotFoundException
     {
         MavenProject project = build( projectDescriptor, localRepository, profileManager );
@@ -216,6 +348,10 @@
         return project;
     }
 
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
     private void ensureMetadataSourceIsInitialized()
         throws ProjectBuildingException
     {
@@ -267,47 +403,25 @@
         return map;
     }
 
-    public MavenProject build( File projectDescriptor, ArtifactRepository localRepository,
-                               ProfileManager profileManager )
-        throws ProjectBuildingException
-    {
-        return buildFromSourceFile( projectDescriptor, localRepository, profileManager, true );
-    }
-
-    public MavenProject build( File projectDescriptor, ArtifactRepository localRepository,
-                               ProfileManager profileManager, boolean checkDistributionManagementStatus )
-        throws ProjectBuildingException
-    {
-        return buildFromSourceFile( projectDescriptor, localRepository, profileManager,
-                                    checkDistributionManagementStatus );
-    }
-
-    private MavenProject buildFromSourceFile( File projectDescriptor, ArtifactRepository localRepository,
-                                              ProfileManager profileManager, boolean checkDistributionManagementStatus )
+    private MavenProject buildFromSourceFileInternal( File projectDescriptor,
+                                                      ArtifactRepository localRepository,
+                                                      ProfileManager profileManager,
+                                                      boolean checkDistributionManagementStatus )
         throws ProjectBuildingException
     {
         Model model = readModel( "unknown", projectDescriptor, true );
 
-        // Always cache files in the source tree over those in the repository
-        CachedModel cachedModel = new CachedModel( projectDescriptor, model );
-
-        String modelKey = createCacheKey( model.getGroupId(), model.getArtifactId(), model.getVersion() );
-        if ( modelCache.containsKey( modelKey ) )
-        {
-            throw new ProjectBuildingException( model.getGroupId() + ":" + model.getArtifactId(),
-                                                "Duplicate project ID found in " +
-                                                    projectDescriptor.getAbsolutePath() );
-        }
-        modelCache.put( modelKey, cachedModel );
-
-        MavenProject project = build( projectDescriptor.getAbsolutePath(), model, localRepository,
-                                      buildArtifactRepositories( getSuperModel() ),
-                                      projectDescriptor.getAbsoluteFile().getParentFile(), profileManager, true );
+        MavenProject project = buildInternal( projectDescriptor.getAbsolutePath(),
+                                              model,
+                                              localRepository,
+                                              buildArtifactRepositories( getSuperModel() ),
+                                              projectDescriptor,
+                                              profileManager,
+                                              true );
 
         if ( checkDistributionManagementStatus )
         {
-            if ( project.getDistributionManagement() != null &&
-                project.getDistributionManagement().getStatus() != null )
+            if ( project.getDistributionManagement() != null && project.getDistributionManagement().getStatus() != null )
             {
                 String projectId = safeVersionlessKey( project.getGroupId(), project.getArtifactId() );
 
@@ -316,46 +430,13 @@
             }
         }
 
-        // Only translate the base directory for files in the source tree
-        pathTranslator.alignToBaseDirectory( project.getModel(), projectDescriptor.getParentFile() );
-
-        Build build = project.getBuild();
-        project.addCompileSourceRoot( build.getSourceDirectory() );
-        project.addScriptSourceRoot( build.getScriptSourceDirectory() );
-        project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
-
-        // Only track the file of a POM in the source tree
-        project.setFile( projectDescriptor );
-
         return project;
     }
 
-    public MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories,
-                                             ArtifactRepository localRepository )
-        throws ProjectBuildingException
-    {
-        return buildFromRepository( artifact, remoteArtifactRepositories, localRepository, true );
-    }
-
-    public MavenProject buildFromRepository( Artifact artifact, List remoteArtifactRepositories,
-                                             ArtifactRepository localRepository, boolean allowStubModel )
-        throws ProjectBuildingException
-    {
-        String cacheKey = createCacheKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
-        MavenProject project = (MavenProject) projectCache.get( cacheKey );
-        if ( project != null )
-        {
-            return project;
-        }
-
-        Model model = findModelFromRepository( artifact, remoteArtifactRepositories, localRepository, allowStubModel );
-
-        return build( "Artifact [" + artifact + "]", model, localRepository, remoteArtifactRepositories, null, null,
-                      false );
-    }
-
-    private Model findModelFromRepository( Artifact artifact, List remoteArtifactRepositories,
-                                           ArtifactRepository localRepository, boolean allowStubModel )
+    private Model findModelFromRepository( Artifact artifact,
+                                           List remoteArtifactRepositories,
+                                           ArtifactRepository localRepository,
+                                           boolean allowStubModel )
         throws ProjectBuildingException
     {
         Artifact projectArtifact;
@@ -367,80 +448,77 @@
         }
         else
         {
-            getLogger().warn( "Attempting to build MavenProject instance for Artifact of type: " + artifact.getType() +
-                "; constructing POM artifact instead." );
+            getLogger().warn( "Attempting to build MavenProject instance for Artifact of type: " + artifact.getType() + "; constructing POM artifact instead." );
 
-            projectArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(),
-                                                                     artifact.getVersion(), artifact.getScope() );
+            projectArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(),
+                                                                     artifact.getArtifactId(),
+                                                                     artifact.getVersion(),
+                                                                     artifact.getScope() );
         }
 
-        CachedModel cachedModel = getCachedProject( projectArtifact.getGroupId(), projectArtifact.getArtifactId(),
-                                                    projectArtifact.getVersion() );
         Model model;
-        if ( cachedModel == null )
+
+        String projectId = ArtifactUtils.versionlessKey( projectArtifact );
+
+        try
         {
-            String projectId = ArtifactUtils.versionlessKey( projectArtifact );
+            artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
 
-            try
-            {
-                artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
+            File file = projectArtifact.getFile();
 
-                File file = projectArtifact.getFile();
-                model = readModel( projectId, file, false );
+            model = readModel( projectId, file, false );
 
-                String downloadUrl = null;
-                ArtifactStatus status = ArtifactStatus.NONE;
+            String downloadUrl = null;
 
-                DistributionManagement distributionManagement = model.getDistributionManagement();
-                if ( distributionManagement != null )
-                {
-                    downloadUrl = distributionManagement.getDownloadUrl();
+            ArtifactStatus status = ArtifactStatus.NONE;
 
-                    status = ArtifactStatus.valueOf( distributionManagement.getStatus() );
-                }
+            DistributionManagement distributionManagement = model.getDistributionManagement();
 
-                checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, localRepository );
+            if ( distributionManagement != null )
+            {
+                downloadUrl = distributionManagement.getDownloadUrl();
 
-                // TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that
-                // Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions?
-                if ( downloadUrl != null )
-                {
-                    projectArtifact.setDownloadUrl( downloadUrl );
-                }
-                else
-                {
-                    projectArtifact.setDownloadUrl( model.getUrl() );
-                }
+                status = ArtifactStatus.valueOf( distributionManagement.getStatus() );
             }
-            catch ( ArtifactResolutionException e )
+
+            checkStatusAndUpdate( projectArtifact, status, file, remoteArtifactRepositories, localRepository );
+
+            // TODO: this is gross. Would like to give it the whole model, but maven-artifact shouldn't depend on that
+            // Can a maven-core implementation of the Artifact interface store it, and be used in the exceptions?
+            if ( downloadUrl != null )
             {
-                throw new ProjectBuildingException( projectId, "Error getting POM for '" + projectId +
-                    "' from the repository: " + e.getMessage(), e );
+                projectArtifact.setDownloadUrl( downloadUrl );
             }
-            catch ( ArtifactNotFoundException e )
+            else
             {
-                if ( allowStubModel )
-                {
-                    getLogger().debug( "Artifact not found - using stub model: " + e.getMessage() );
-                    model = createStubModel( projectArtifact );
-                }
-                else
-                {
-                    throw new ProjectBuildingException( projectId, "POM '" + projectId + "' not found in repository: " +
-                        e.getMessage(), e );
-                }
+                projectArtifact.setDownloadUrl( model.getUrl() );
             }
         }
-        else
+        catch ( ArtifactResolutionException e )
         {
-            model = cachedModel.getModel();
+            throw new ProjectBuildingException( projectId, "Error getting POM for '" + projectId + "' from the repository: " + e.getMessage(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            if ( allowStubModel )
+            {
+                getLogger().debug( "Artifact not found - using stub model: " + e.getMessage() );
+
+                model = createStubModel( projectArtifact );
+            }
+            else
+            {
+                throw new ProjectBuildingException( projectId, "POM '" + projectId + "' not found in repository: " + e.getMessage(), e );
+            }
         }
 
         return model;
     }
 
-    private void checkStatusAndUpdate( Artifact projectArtifact, ArtifactStatus status, File file,
-                                       List remoteArtifactRepositories, ArtifactRepository localRepository )
+    private void checkStatusAndUpdate( Artifact projectArtifact,
+                                       ArtifactStatus status, File file,
+                                       List remoteArtifactRepositories,
+                                       ArtifactRepository localRepository )
         throws ArtifactNotFoundException
     {
         // TODO: configurable actions dependant on status
@@ -476,50 +554,52 @@
         }
     }
 
+    // jvz:note
+    // This is used when requested artifacts do not have an associated POM. This is for the case where we are
+    // using an m1 repo where the only thing required to be present are the JAR files.
     private Model createStubModel( Artifact projectArtifact )
     {
         getLogger().debug( "Using defaults for missing POM " + projectArtifact );
 
         Model model = new Model();
+
         model.setModelVersion( "4.0.0" );
+
         model.setArtifactId( projectArtifact.getArtifactId() );
+
         model.setGroupId( projectArtifact.getGroupId() );
+
         model.setVersion( projectArtifact.getVersion() );
+
         // TODO: not correct in some instances
         model.setPackaging( projectArtifact.getType() );
 
         model.setDistributionManagement( new DistributionManagement() );
-        model.getDistributionManagement().setStatus( ArtifactStatus.GENERATED.toString() );
-
-/* TODO: we should only do this if we can verify the existence of the JAR itself
-        File file = artifact.getFile();
-        file.getParentFile().mkdirs();
 
-        FileWriter writer = null;
-        try
-        {
-            writer = new FileWriter( file );
+        model.getDistributionManagement().setStatus( ArtifactStatus.GENERATED.toString() );
 
-            MavenXpp3Writer w = new MavenXpp3Writer();
-            w.write( writer, model );
-        }
-        catch ( IOException ioe )
-        {
-            getLogger().warn( "Attempted to write out a temporary generated POM, but failed", ioe );
-        }
-        finally
-        {
-            IOUtil.close( writer );
-        }
-*/
         return model;
     }
 
-    private MavenProject build( String pomLocation, Model model, ArtifactRepository localRepository,
-                                List parentSearchRepositories, File projectDir, ProfileManager externalProfileManager,
-                                boolean strict )
+    // jvz:note
+    // We've got a mixture of things going in the USD and from the repository, sometimes the descriptor
+    // is a real file and sometimes null which makes things confusing.
+    private MavenProject buildInternal( String pomLocation,
+                                        Model model,
+                                        ArtifactRepository localRepository,
+                                        List parentSearchRepositories,
+                                        File projectDescriptor,
+                                        ProfileManager externalProfileManager,
+                                        boolean strict )
         throws ProjectBuildingException
     {
+        File projectDir = null;
+
+        if ( projectDescriptor != null )
+        {
+            projectDir = projectDescriptor.getAbsoluteFile().getParentFile();
+        }
+
         Model superModel = getSuperModel();
 
         ProfileManager superProjectProfileManager = new DefaultProfileManager( container );
@@ -573,8 +653,7 @@
                 ArtifactRepository artifactRepo = null;
                 try
                 {
-                    artifactRepo =
-                        ProjectUtils.buildArtifactRepository( mavenRepo, artifactRepositoryFactory, container );
+                    artifactRepo = ProjectUtils.buildArtifactRepository( mavenRepo, artifactRepositoryFactory, container );
                 }
                 catch ( InvalidRepositoryException e )
                 {
@@ -590,8 +669,14 @@
         MavenProject project = null;
         try
         {
-            project = assembleLineage( model, lineage, localRepository, projectDir, parentSearchRepositories,
-                                       aggregatedRemoteWagonRepositories, externalProfileManager, strict );
+            project = assembleLineage( model,
+                                       lineage,
+                                       localRepository,
+                                       projectDir,
+                                       parentSearchRepositories,
+                                       aggregatedRemoteWagonRepositories,
+                                       externalProfileManager,
+                                       strict );
         }
         catch ( InvalidRepositoryException e )
         {
@@ -616,10 +701,13 @@
 
         // only add the super repository if it wasn't overridden by a profile or project
         List repositories = new ArrayList( aggregatedRemoteWagonRepositories );
+
         List superRepositories = buildArtifactRepositories( superModel );
+
         for ( Iterator i = superRepositories.iterator(); i.hasNext(); )
         {
             ArtifactRepository repository = (ArtifactRepository) i.next();
+
             if ( !repositories.contains( repository ) )
             {
                 repositories.add( repository );
@@ -628,8 +716,7 @@
 
         try
         {
-            project =
-                processProjectLogic( pomLocation, project, repositories, externalProfileManager, projectDir, strict );
+            project = processProjectLogic( pomLocation, project, externalProfileManager, projectDir, strict );
         }
         catch ( ModelInterpolationException e )
         {
@@ -639,8 +726,28 @@
         {
             throw new InvalidProjectModelException( projectId, pomLocation, e.getMessage(), e );
         }
-        projectCache.put( createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() ),
-                          project );
+
+        projectCache.put( createCacheKey( project.getGroupId(), project.getArtifactId(), project.getVersion() ), project );
+
+        // jvz:note
+        // this only happens if we are building from a source file
+        if ( projectDescriptor != null )
+        {
+            // Only translate the base directory for files in the source tree
+            pathTranslator.alignToBaseDirectory( project.getModel(), projectDescriptor.getParentFile() );
+
+            Build build = project.getBuild();
+
+            project.addCompileSourceRoot( build.getSourceDirectory() );
+
+            project.addScriptSourceRoot( build.getScriptSourceDirectory() );
+
+            project.addTestCompileSourceRoot( build.getTestSourceDirectory() );
+
+            // Only track the file of a POM in the source tree
+            project.setFile( projectDescriptor );
+        }
+
         return project;
     }
 
@@ -668,8 +775,7 @@
     {
         try
         {
-            return ProjectUtils.buildArtifactRepositories( model.getRepositories(), artifactRepositoryFactory,
-                                                           container );
+            return ProjectUtils.buildArtifactRepositories( model.getRepositories(), artifactRepositoryFactory, container );
         }
         catch ( InvalidRepositoryException e )
         {
@@ -686,18 +792,14 @@
      * the resolved source roots, etc for the parent - that occurs for the parent when it is constructed independently
      * and projects are not cached or reused
      */
-    private MavenProject processProjectLogic( String pomLocation, MavenProject project, List remoteRepositories,
-                                              ProfileManager profileMgr, File projectDir, boolean strict )
+    private MavenProject processProjectLogic( String pomLocation,
+                                              MavenProject project,
+                                              ProfileManager profileMgr,
+                                              File projectDir,
+                                              boolean strict )
         throws ProjectBuildingException, ModelInterpolationException, InvalidRepositoryException
     {
         Model model = project.getModel();
-        String key = createCacheKey( model.getGroupId(), model.getArtifactId(), model.getVersion() );
-        if ( !modelCache.containsKey( key ) )
-        {
-            // clone the model because the profile injection below will modify this instance
-            CachedModel cachedModel = new CachedModel( project.getFile(), ModelUtils.cloneModel( model ) );
-            modelCache.put( key, cachedModel );
-        }
 
         List activeProfiles = project.getActiveProfiles();
 
@@ -787,7 +889,9 @@
 
         // TODO: these aren't taking active project artifacts into consideration in the reactor
         project.setPluginArtifacts( createPluginArtifacts( projectId, project.getBuildPlugins() ) );
+
         project.setReportArtifacts( createReportArtifacts( projectId, project.getReportPlugins() ) );
+
         project.setExtensionArtifacts( createExtensionArtifacts( projectId, project.getBuildExtensions() ) );
 
         return project;
@@ -796,9 +900,13 @@
     /**
      * @noinspection CollectionDeclaredAsConcreteClass
      */
-    private MavenProject assembleLineage( Model model, LinkedList lineage, ArtifactRepository localRepository,
-                                          File projectDir, List parentSearchRepositories,
-                                          Set aggregatedRemoteWagonRepositories, ProfileManager externalProfileManager,
+    private MavenProject assembleLineage( Model model,
+                                          LinkedList lineage,
+                                          ArtifactRepository localRepository,
+                                          File projectDir,
+                                          List parentSearchRepositories,
+                                          Set aggregatedRemoteWagonRepositories,
+                                          ProfileManager externalProfileManager,
                                           boolean strict )
         throws ProjectBuildingException, InvalidRepositoryException
     {
@@ -822,6 +930,7 @@
         if ( externalProfileManager != null )
         {
             profileManager.explicitlyActivate( externalProfileManager.getExplicitlyActivatedIds() );
+
             profileManager.explicitlyDeactivate( externalProfileManager.getExplicitlyDeactivatedIds() );
         }
 
@@ -839,8 +948,7 @@
         {
             String projectId = safeVersionlessKey( model.getGroupId(), model.getArtifactId() );
 
-            throw new ProjectBuildingException( projectId, "Failed to activate local (project-level) build profiles: " +
-                e.getMessage(), e );
+            throw new ProjectBuildingException( projectId, "Failed to activate local (project-level) build profiles: " + e.getMessage(), e );
         }
 
         MavenProject project = new MavenProject( model );
@@ -866,8 +974,7 @@
             else if ( parentModel.getGroupId().equals( model.getGroupId() ) &&
                 parentModel.getArtifactId().equals( model.getArtifactId() ) )
             {
-                throw new ProjectBuildingException( projectId,
-                                                    "Parent element is a duplicate of " + "the current project " );
+                throw new ProjectBuildingException( projectId, "Parent element is a duplicate of " + "the current project " );
             }
             else if ( StringUtils.isEmpty( parentModel.getVersion() ) )
             {
@@ -877,17 +984,7 @@
             // the only way this will have a value is if we find the parent on disk...
             File parentDescriptor = null;
 
-            CachedModel cachedModel =
-                getCachedProject( parentModel.getGroupId(), parentModel.getArtifactId(), parentModel.getVersion() );
-            if ( cachedModel != null )
-            {
-                model = cachedModel.getModel();
-                parentDescriptor = cachedModel.getDescriptor();
-            }
-            else
-            {
-                model = null;
-            }
+            model = null;
 
             String parentRelativePath = parentModel.getRelativePath();
 
@@ -1156,11 +1253,6 @@
         }
     }
 
-    private CachedModel getCachedProject( String groupId, String artifactId, String version )
-    {
-        return (CachedModel) modelCache.get( createCacheKey( groupId, artifactId, version ) );
-    }
-
     private static String createCacheKey( String groupId, String artifactId, String version )
     {
         return groupId + ":" + artifactId + ":" + version;
@@ -1298,53 +1390,6 @@
         return extensionArtifacts;
     }
 
-    public MavenProject buildStandaloneSuperProject( ArtifactRepository localRepository )
-        throws ProjectBuildingException
-    {
-        Model superModel = getSuperModel();
-
-        superModel.setGroupId( STANDALONE_SUPERPOM_GROUPID );
-
-        superModel.setArtifactId( STANDALONE_SUPERPOM_ARTIFACTID );
-
-        superModel.setVersion( STANDALONE_SUPERPOM_VERSION );
-
-        ProfileManager profileManager = new DefaultProfileManager( container );
-
-        List activeProfiles;
-
-        profileManager.addProfiles( superModel.getProfiles() );
-
-        String projectId = safeVersionlessKey( STANDALONE_SUPERPOM_GROUPID, STANDALONE_SUPERPOM_ARTIFACTID );
-
-        activeProfiles = injectActiveProfiles( profileManager, superModel );
-
-        MavenProject project = new MavenProject( superModel );
-
-        project.setActiveProfiles( activeProfiles );
-
-        project.setOriginalModel( superModel );
-
-        try
-        {
-            List remoteRepositories = buildArtifactRepositories( superModel );
-
-            project = processProjectLogic( "<Super-POM>", project, remoteRepositories, null, null, true );
-
-            project.setExecutionRoot( true );
-
-            return project;
-        }
-        catch ( ModelInterpolationException e )
-        {
-            throw new ProjectBuildingException( projectId, e.getMessage(), e );
-        }
-        catch ( InvalidRepositoryException e )
-        {
-            throw new ProjectBuildingException( projectId, e.getMessage(), e );
-        }
-    }
-
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
@@ -1363,28 +1408,5 @@
         throws ContextException
     {
         this.container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
-    }
-
-    private static class CachedModel
-    {
-        private File descriptor;
-
-        private Model model;
-
-        public CachedModel( File descriptor, Model model )
-        {
-            this.descriptor = descriptor;
-            this.model = model;
-        }
-
-        public File getDescriptor()
-        {
-            return descriptor;
-        }
-
-        public Model getModel()
-        {
-            return model;
-        }
     }
 }



Re: svn commit: r371079 - in /maven/components/trunk: maven-core-it/README.txt maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Posted by Jason van Zyl <ja...@maven.org>.
Brett Porter wrote:
> Is this going to land on the branch eventually? 

That's the plan.

> Seems like too big a
> change for there, so should the removal of the exception be done there
> independently?

I'll decide once I'm further with the refactoring. I've got a couple ITs 
to check in which demonstrate some other general problems with the 
current order of operations in the project builder. I'm going to build 
up the ITs for the embedder, the ant tasks as well as the ITs which 
demonstrate the current problems. If I can't get those all working 
satisfactorily I'll selectively snip out the duplicate but I think it 
will make it easier for me (and others) to fix some other bugs.

> - Brett
> 
> jvanzyl@apache.org wrote:
>> Author: jvanzyl
>> Date: Sat Jan 21 08:36:06 2006
>> New Revision: 371079
>>
>> URL: http://svn.apache.org/viewcvs?rev=371079&view=rev
>> Log:
>> [MNG-1980] Removing the duplicate ID, the reactor will catch duplicate IDs in a single build so it doesn't not need
>>            to be checked for in the project builder. I have removed the model caching for now while I'm refactoring
>>            the project builder. The plan is to break the 1000+ lines down into its constituent components and use
>>            a pipeline to build up the project.
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 
> 
> 


-- 

jvz.

Jason van Zyl
jason at maven.org
http://maven.apache.org

Three people can keep a secret provided two of them are dead.

  -- Unknown--

jvz.

Jason van Zyl
jason at maven.org
http://maven.apache.org

A man enjoys his work when he understands the whole and when he
is responsible for the quality of the whole

  -- Christopher Alexander


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org


Re: svn commit: r371079 - in /maven/components/trunk: maven-core-it/README.txt maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Posted by Brett Porter <br...@apache.org>.
Is this going to land on the branch eventually? Seems like too big a
change for there, so should the removal of the exception be done there
independently?

- Brett

jvanzyl@apache.org wrote:
> Author: jvanzyl
> Date: Sat Jan 21 08:36:06 2006
> New Revision: 371079
> 
> URL: http://svn.apache.org/viewcvs?rev=371079&view=rev
> Log:
> [MNG-1980] Removing the duplicate ID, the reactor will catch duplicate IDs in a single build so it doesn't not need
>            to be checked for in the project builder. I have removed the model caching for now while I'm refactoring
>            the project builder. The plan is to break the 1000+ lines down into its constituent components and use
>            a pipeline to build up the project.
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org