You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2008/08/31 06:19:07 UTC

svn commit: r690633 - /maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Author: sisbell
Date: Sat Aug 30 21:19:05 2008
New Revision: 690633

URL: http://svn.apache.org/viewvc?rev=690633&view=rev
Log:
Fix for profiles.

Modified:
    maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java

Modified: maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=690633&r1=690632&r2=690633&view=diff
==============================================================================
--- maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/sisbell-maven-2.1-profile/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Sat Aug 30 21:19:05 2008
@@ -169,7 +169,7 @@
 
         if (project == null) {
             project = readModelFromLocalPath("unknown", projectDescriptor, new PomArtifactResolver(config.getLocalRepository(),
-                    repositoryHelper.buildArtifactRepositories(getSuperModel()), artifactResolver), config);
+                    repositoryHelper.buildArtifactRepositories(getSuperProject(config, projectDescriptor, true).getModel()), artifactResolver), config);
 
             project.setFile(projectDescriptor);
             project = buildInternal(project.getModel(),
@@ -216,10 +216,10 @@
 
         if (project == null) {
             Model model = repositoryHelper.findModelFromRepository(artifact, remoteArtifactRepositories, localRepository);
+            ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository(localRepository);
 
             List<ArtifactRepository> artifactRepositories = new ArrayList<ArtifactRepository>(remoteArtifactRepositories);
-            artifactRepositories.addAll(repositoryHelper.buildArtifactRepositories(getSuperModel()));
-            ProjectBuilderConfiguration config = new DefaultProjectBuilderConfiguration().setLocalRepository(localRepository);
+            artifactRepositories.addAll(repositoryHelper.buildArtifactRepositories(getSuperProject(config, artifact.getFile(), false).getModel()));
 
             project = readModelFromLocalPath("unknown", artifact.getFile(), new PomArtifactResolver(config.getLocalRepository(),
                     artifactRepositories, artifactResolver), config);
@@ -281,11 +281,10 @@
         }
 
         getLogger().debug("Activated the following profiles for standalone super-pom: " + activeProfiles);
-        project.setActiveProfiles(activeProfiles);
 
         try {
-            interpolateModelAndInjectDefault(project.getModel(), null, null, config, activeProfiles);
-
+            project = interpolateModelAndInjectDefault(project.getModel(), null, null, config);
+            project.setActiveProfiles(activeProfiles);
             project.setRemoteArtifactRepositories(mavenTools.buildArtifactRepositories(superModel.getRepositories()));
             project.setPluginArtifactRepositories(mavenTools.buildArtifactRepositories(superModel.getRepositories()));
         }
@@ -383,25 +382,11 @@
                                        ProjectBuilderConfiguration config,
                                        File projectDescriptor,
                                        File parentDescriptor,
-                                       boolean isReactorProject
-    )
+                                       boolean isReactorProject )
             throws ProjectBuildingException {
-
-        MavenProject superProject;
-        try {
-            superProject = new MavenProject(getSuperModel(), artifactFactory, mavenTools, repositoryHelper, this, config);
-        } catch (InvalidRepositoryException e) {
-            throw new ProjectBuildingException(STANDALONE_SUPERPOM_GROUPID + ":"
-                    + STANDALONE_SUPERPOM_ARTIFACTID,
-                    "Maven super-POM contains an invalid repository!",
-                    e);
-        }
-
         String projectId = safeVersionlessKey(model.getGroupId(), model.getArtifactId());
 
-        // FIXME: Find a way to pass in this context, so it's never null!
         ProfileActivationContext profileActivationContext;
-
         ProfileManager externalProfileManager = config.getGlobalProfileManager();
         if (externalProfileManager != null) {
             // used to trigger the caching of SystemProperties in the container context...
@@ -411,28 +396,14 @@
             catch (ProfileActivationException e) {
                 throw new ProjectBuildingException(projectId, "Failed to activate external profiles.", projectDescriptor, e);
             }
-
             profileActivationContext = externalProfileManager.getProfileActivationContext();
         } else {
             profileActivationContext = new DefaultProfileActivationContext(config.getExecutionProperties(), false);
         }
 
-        LinkedHashSet activeInSuperPom = new LinkedHashSet();
-        List activated = profileAdvisor.applyActivatedProfiles(getSuperModel(), projectDescriptor, isReactorProject, profileActivationContext);
-        if (!activated.isEmpty()) {
-            activeInSuperPom.addAll(activated);
-        }
-
-        activated = profileAdvisor.applyActivatedExternalProfiles(getSuperModel(), projectDescriptor, externalProfileManager);
-        if (!activated.isEmpty()) {
-            activeInSuperPom.addAll(activated);
-        }
-
-        superProject.setActiveProfiles(activated);
-
         MavenProject project;
         try {
-            project = interpolateModelAndInjectDefault(model, projectDescriptor, parentDescriptor, config, activated);
+            project = interpolateModelAndInjectDefault(model, projectDescriptor, parentDescriptor, config);
         }
         catch (ModelInterpolationException e) {
             throw new InvalidProjectModelException(projectId, e.getMessage(), projectDescriptor, e);
@@ -440,19 +411,11 @@
         catch (InvalidRepositoryException e) {
             throw new InvalidProjectModelException(projectId, e.getMessage(), projectDescriptor, e);
         }
-       
-        project.setActiveProfiles( profileAdvisor.applyActivatedProfiles( project.getModel(), project.getFile(), isReactorProject, profileActivationContext ) );
 
-        if (externalProfileManager != null) {
-            LinkedHashSet active = new LinkedHashSet();
-
-            List existingActiveProfiles = project.getActiveProfiles();
-            if ((existingActiveProfiles != null) && !existingActiveProfiles.isEmpty()) {
-                active.addAll(existingActiveProfiles);
-            }
-
-            profileAdvisor.applyActivatedExternalProfiles(project.getModel(), project.getFile(), externalProfileManager);
-        }
+        List<Profile> projectProfiles = new ArrayList<Profile>();
+        projectProfiles.addAll( profileAdvisor.applyActivatedProfiles( project.getModel(), project.getFile(), isReactorProject, profileActivationContext ) );
+        projectProfiles.addAll(profileAdvisor.applyActivatedExternalProfiles(project.getModel(), project.getFile(), externalProfileManager));
+        project.setActiveProfiles(projectProfiles);
 
         projectWorkspace.storeProjectByCoordinate(project);
         projectWorkspace.storeProjectByFile(project);
@@ -463,8 +426,7 @@
     private MavenProject interpolateModelAndInjectDefault(Model model,
                                              File pomFile,
                                              File parentFile,
-                                             ProjectBuilderConfiguration config,
-                                             List activeProfiles
+                                             ProjectBuilderConfiguration config
     )
             throws ProjectBuildingException, ModelInterpolationException, InvalidRepositoryException {
         File projectDir = null;
@@ -488,7 +450,6 @@
 
         // We will return a different project object using the new model (hence the need to return a project, not just modify the parameter)
         MavenProject project = new MavenProject(model, artifactFactory, mavenTools, repositoryHelper, this, config);
-        project.setActiveProfiles(activeProfiles);
 
         Artifact projectArtifact = artifactFactory.createBuildArtifact(project.getGroupId(), project.getArtifactId(),
                 project.getVersion(), project.getPackaging());
@@ -546,80 +507,45 @@
         }
     }
 
-    /**
-     * @param isReactorProject
-     * @noinspection CollectionDeclaredAsConcreteClass
-     * @todo We need to find an effective way to unit test parts of this method!
-     * @todo Refactor this into smaller methods with discrete purposes.
-     */
-    /*
-    private MavenProject assembleLineage(Model model,
-                                         LinkedList lineage,
-                                         ProjectBuilderConfiguration config,
-                                         File pomFile,
-                                         Set aggregatedRemoteWagonRepositories,
-                                         boolean strict,
-                                         boolean isReactorProject)
-            throws ProjectBuildingException, InvalidRepositoryException {
-        ModelLineage modelLineage = new DefaultModelLineage();
+    private MavenProject getSuperProject(ProjectBuilderConfiguration config, File projectDescriptor, boolean isReactorProject)
+        throws ProjectBuildingException {
 
-        modelLineage.setOrigin(model, pomFile, new ArrayList(aggregatedRemoteWagonRepositories), isReactorProject);
+        MavenProject superProject;
+        Model model = getSuperModel();
+        try {
+            superProject = new MavenProject(model, artifactFactory, mavenTools, repositoryHelper, this, config);
+        } catch (InvalidRepositoryException e) {
+            throw new ProjectBuildingException(STANDALONE_SUPERPOM_GROUPID + ":"
+                    + STANDALONE_SUPERPOM_ARTIFACTID,
+                    "Maven super-POM contains an invalid repository!",
+                    e);
+        }
 
-        modelLineageBuilder.resumeBuildingModelLineage(modelLineage, config, !strict, isReactorProject);
+        String projectId = safeVersionlessKey(model.getGroupId(), model.getArtifactId());
 
-        // FIXME: Find a way to pass in this context, so it's never null!
         ProfileActivationContext profileActivationContext;
         ProfileManager externalProfileManager = config.getGlobalProfileManager();
-
         if (externalProfileManager != null) {
+            // used to trigger the caching of SystemProperties in the container context...
+            try {
+                externalProfileManager.getActiveProfiles();
+            }
+            catch (ProfileActivationException e) {
+                throw new ProjectBuildingException(projectId, "Failed to activate external profiles.", projectDescriptor, e);
+            }
             profileActivationContext = externalProfileManager.getProfileActivationContext();
         } else {
             profileActivationContext = new DefaultProfileActivationContext(config.getExecutionProperties(), false);
         }
 
-        MavenProject lastProject = null;
-        for (ModelLineageIterator it = modelLineage.lineageIterator(); it.hasNext();) {
-            Model currentModel = (Model) it.next();
-
-            File currentPom = it.getPOMFile();
-
-            MavenProject project = new MavenProject(currentModel, artifactFactory, mavenTools, repositoryHelper, this);
-            project.setFile(currentPom);
-
-            if (lastProject != null) {
-                // TODO: Use cached parent project here, and stop looping, if possible...
-                lastProject.setParent(project);
-                project = lastProject.getParent();
+        List<Profile> superProjectProfiles = new ArrayList<Profile>();
+        superProjectProfiles.addAll(profileAdvisor.applyActivatedProfiles(model, projectDescriptor, isReactorProject, profileActivationContext));
+        superProjectProfiles.addAll(profileAdvisor.applyActivatedExternalProfiles(model, projectDescriptor, externalProfileManager));
+        superProject.setActiveProfiles(superProjectProfiles);
 
-                lastProject.setParentArtifact(artifactFactory.createParentArtifact(project.getGroupId(), project
-                        .getArtifactId(), project.getVersion()));
-            }
-
-            // NOTE: the caching aspect may replace the parent project instance, so we apply profiles here.
-            // TODO: Review this...is that a good idea, to allow application of profiles when other profiles could have been applied already?
-            project.setActiveProfiles(profileAdvisor.applyActivatedProfiles(project.getModel(), project.getFile(), isReactorProject, profileActivationContext));
-
-            lineage.addFirst(project);
-
-            lastProject = project;
-        }
-
-        MavenProject result = (MavenProject) lineage.getLast();
-
-        if (externalProfileManager != null) {
-            LinkedHashSet active = new LinkedHashSet();
-
-            List existingActiveProfiles = result.getActiveProfiles();
-            if ((existingActiveProfiles != null) && !existingActiveProfiles.isEmpty()) {
-                active.addAll(existingActiveProfiles);
-            }
-
-            profileAdvisor.applyActivatedExternalProfiles(result.getModel(), pomFile, externalProfileManager);
-        }
-
-        return result;
+        return superProject;
     }
-    */
+
     private Model superModel;
 
     private Model getSuperModel()
@@ -629,7 +555,6 @@
         }
 
         URL url = DefaultMavenProjectBuilder.class.getResource("pom-" + MAVEN_MODEL_VERSION + ".xml");
-
         String projectId = safeVersionlessKey(STANDALONE_SUPERPOM_GROUPID, STANDALONE_SUPERPOM_ARTIFACTID);
 
         Reader reader = null;
@@ -675,7 +600,7 @@
         MavenProject mavenProject;
         try {
             mavenProject = projectBuilder.buildFromLocalPath(new FileInputStream(projectDescriptor),
-                    Arrays.asList(getSuperModel()), null, null, resolver,
+                    Arrays.asList(getSuperProject(config, projectDescriptor, true).getModel()), null, null, resolver,
                     projectDescriptor.getParentFile(), config);
         } catch (IOException e) {
             e.printStackTrace();