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;
-        }
     }
 }


Reply via email to