You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sc...@apache.org on 2017/03/08 17:03:48 UTC
[44/46] maven git commit: [MNG-6173] MavenSession.getAllProjects()
should return all projects in the reactor
[MNG-6173] MavenSession.getAllProjects() should return all projects in the reactor
This commit removes the initialization of the MavenSession object from the
DefaultGraphBuilder. The GraphBuilder implementation should only build the
graph and should not touch the MavenSession object passed into it.
To allow complete initialization of the MavenSession the ProjectDependencyGraph
interface got enhanced so that GraphBuilder implementations can communicate all
collected projects in addition to the processed list of projects.
This closes #105
Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/114ef6c5
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/114ef6c5
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/114ef6c5
Branch: refs/heads/MNG-5984
Commit: 114ef6c5a2802e8758e466af92b70f51fd7a2929
Parents: 862c84a
Author: Christoph B�hme <ch...@b3e.net>
Authored: Mon Feb 20 07:32:17 2017 +0100
Committer: Christian Schulte <sc...@apache.org>
Committed: Mon Mar 6 17:35:24 2017 +0100
----------------------------------------------------------------------
.../java/org/apache/maven/DefaultMaven.java | 2 +-
.../maven/execution/ProjectDependencyGraph.java | 9 ++
.../apache/maven/graph/DefaultGraphBuilder.java | 109 ++++++++-----------
.../graph/DefaultProjectDependencyGraph.java | 32 ++++++
.../graph/FilteredProjectDependencyGraph.java | 8 ++
.../AbstractCoreMavenComponentTestCase.java | 1 +
.../maven/lifecycle/LifecycleExecutorTest.java | 5 +
.../stub/ProjectDependencyGraphStub.java | 5 +
8 files changed, 106 insertions(+), 65 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index 15b946e..7e46ad0 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -525,7 +525,7 @@ public class DefaultMaven
{
ProjectDependencyGraph projectDependencyGraph = graphResult.get();
session.setProjects( projectDependencyGraph.getSortedProjects() );
- session.setAllProjects( projectDependencyGraph.getSortedProjects() );
+ session.setAllProjects( projectDependencyGraph.getAllProjects() );
session.setProjectDependencyGraph( projectDependencyGraph );
}
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
index 0d5584b..d206d73 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
@@ -33,6 +33,15 @@ public interface ProjectDependencyGraph
{
/**
+ * Gets all collected projects.
+ *
+ * @return All collected projects.
+ *
+ * @since 3.5.0-alpha-2
+ */
+ List<MavenProject> getAllProjects();
+
+ /**
* Gets all projects in their intended build order, i.e. after topologically sorting the projects according to their
* inter-dependencies.
*
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
index 680d584..2cbea84 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
@@ -28,12 +28,12 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
+import com.google.common.collect.Lists;
import org.apache.maven.DefaultMaven;
import org.apache.maven.MavenExecutionException;
import org.apache.maven.ProjectCycleException;
import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionResult;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.execution.ProjectDependencyGraph;
import org.apache.maven.model.Plugin;
@@ -43,6 +43,7 @@ import org.apache.maven.model.building.ModelProblemUtils;
import org.apache.maven.model.building.ModelSource;
import org.apache.maven.model.building.Result;
import org.apache.maven.model.building.UrlModelSource;
+import org.apache.maven.project.DuplicateProjectException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;
@@ -54,12 +55,11 @@ import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.dag.CycleDetectedException;
-import com.google.common.collect.Lists;
-
@Component( role = GraphBuilder.class, hint = GraphBuilder.HINT )
public class DefaultGraphBuilder
implements GraphBuilder
{
+
@Requirement
private Logger logger;
@@ -69,77 +69,68 @@ public class DefaultGraphBuilder
@Override
public Result<ProjectDependencyGraph> build( MavenSession session )
{
- if ( session.getProjectDependencyGraph() != null )
+ try
{
- return dependencyGraph( session, session.getProjects(), false );
- }
-
- List<MavenProject> projects = session.getProjects();
+ Result<ProjectDependencyGraph> result = sessionDependencyGraph( session );
- if ( projects == null )
- {
- try
- {
- projects = getProjectsForMavenReactor( session );
- }
- catch ( ProjectBuildingException e )
+ if ( result == null )
{
- return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
+ final List<MavenProject> projects = getProjectsForMavenReactor( session );
+ validateProjects( projects );
+ result = reactorDependencyGraph( session, projects );
}
- validateProjects( projects );
-
- return dependencyGraph( session, projects, true );
- }
- else
- {
- return dependencyGraph( session, projects, false );
+ return result;
}
- }
-
- private Result<ProjectDependencyGraph> dependencyGraph( MavenSession session, List<MavenProject> projects,
- boolean applyMakeBehaviour )
- {
- MavenExecutionRequest request = session.getRequest();
-
- ProjectDependencyGraph projectDependencyGraph = null;
-
- try
+ catch ( final ProjectBuildingException e )
{
- projectDependencyGraph = new DefaultProjectDependencyGraph( projects );
-
- if ( applyMakeBehaviour )
- {
- List<MavenProject> activeProjects = projectDependencyGraph.getSortedProjects();
-
- activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, request );
- activeProjects = trimExcludedProjects( activeProjects, request );
- activeProjects = trimResumedProjects( activeProjects, request );
-
- if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
- {
- projectDependencyGraph =
- new FilteredProjectDependencyGraph( projectDependencyGraph, activeProjects );
- }
- }
+ return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
}
- catch ( CycleDetectedException e )
+ catch ( final CycleDetectedException e )
{
String message = "The projects in the reactor contain a cyclic reference: " + e.getMessage();
ProjectCycleException error = new ProjectCycleException( message, e );
return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, error ) ) );
}
- catch ( org.apache.maven.project.DuplicateProjectException e )
+ catch ( final DuplicateProjectException e )
{
return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
}
- catch ( MavenExecutionException e )
+ catch ( final MavenExecutionException e )
{
return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
}
+ }
+
+ private Result<ProjectDependencyGraph> sessionDependencyGraph( final MavenSession session )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ Result<ProjectDependencyGraph> result = null;
+
+ if ( session.getProjectDependencyGraph() != null || session.getProjects() != null )
+ {
+ final ProjectDependencyGraph graph =
+ new DefaultProjectDependencyGraph( session.getAllProjects(), session.getProjects() );
+
+ result = Result.success( graph );
+ }
- session.setProjects( projectDependencyGraph.getSortedProjects() );
- session.setProjectDependencyGraph( projectDependencyGraph );
+ return result;
+ }
+
+ private Result<ProjectDependencyGraph> reactorDependencyGraph( MavenSession session, List<MavenProject> projects )
+ throws CycleDetectedException, DuplicateProjectException, MavenExecutionException
+ {
+ ProjectDependencyGraph projectDependencyGraph = new DefaultProjectDependencyGraph( projects );
+ List<MavenProject> activeProjects = projectDependencyGraph.getSortedProjects();
+ activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
+ activeProjects = trimExcludedProjects( activeProjects, session.getRequest() );
+ activeProjects = trimResumedProjects( activeProjects, session.getRequest() );
+
+ if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
+ {
+ projectDependencyGraph = new FilteredProjectDependencyGraph( projectDependencyGraph, activeProjects );
+ }
return Result.success( projectDependencyGraph );
}
@@ -368,16 +359,6 @@ public class DefaultGraphBuilder
return false;
}
- private MavenExecutionResult addExceptionToResult( MavenExecutionResult result, Throwable e )
- {
- if ( !result.getExceptions().contains( e ) )
- {
- result.addException( e );
- }
-
- return result;
- }
-
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Project collection
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
index a5233e5..effab0b 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
@@ -21,6 +21,7 @@ package org.apache.maven.graph;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -43,6 +44,8 @@ public class DefaultProjectDependencyGraph
private ProjectSorter sorter;
+ private List<MavenProject> allProjects;
+
/**
* Creates a new project dependency graph based on the specified projects.
*
@@ -53,9 +56,38 @@ public class DefaultProjectDependencyGraph
public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
throws CycleDetectedException, DuplicateProjectException
{
+ super();
+ this.allProjects = Collections.unmodifiableList( new ArrayList<>( projects ) );
+ this.sorter = new ProjectSorter( projects );
+ }
+
+ /**
+ * Creates a new project dependency graph based on the specified projects.
+ *
+ * @param allProjects All collected projects.
+ * @param projects The projects to create the dependency graph with.
+ *
+ * @throws DuplicateProjectException
+ * @throws CycleDetectedException
+ * @since 3.5.0-alpha-2
+ */
+ public DefaultProjectDependencyGraph( final List<MavenProject> allProjects,
+ final Collection<MavenProject> projects )
+ throws CycleDetectedException, DuplicateProjectException
+ {
+ super();
+ this.allProjects = Collections.unmodifiableList( new ArrayList<>( allProjects ) );
this.sorter = new ProjectSorter( projects );
}
+ /**
+ * @since 3.5.0-alpha-2
+ */
+ public List<MavenProject> getAllProjects()
+ {
+ return this.allProjects;
+ }
+
public List<MavenProject> getSortedProjects()
{
return new ArrayList<>( sorter.getSortedProjects() );
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
index 1d9c8db..ad3910d 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
@@ -64,6 +64,14 @@ class FilteredProjectDependencyGraph
}
}
+ /**
+ * @since 3.5.0-alpha-2
+ */
+ public List<MavenProject> getAllProjects()
+ {
+ return this.projectDependencyGraph.getAllProjects();
+ }
+
public List<MavenProject> getSortedProjects()
{
if ( sortedProjects == null )
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
----------------------------------------------------------------------
diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
index 57d374f..157a5ec 100644
--- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
+++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
@@ -157,6 +157,7 @@ public abstract class AbstractCoreMavenComponentTestCase
new MavenSession( getContainer(), configuration.getRepositorySession(), request,
new DefaultMavenExecutionResult() );
session.setProjects( Arrays.asList( project ) );
+ session.setAllProjects( session.getProjects() );
return session;
}
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
----------------------------------------------------------------------
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
index 951f133..5252a21 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
@@ -400,6 +400,11 @@ public class LifecycleExecutorTest
return Collections.emptyList();
}
+ public List<MavenProject> getAllProjects()
+ {
+ return session.getAllProjects();
+ }
+
public List<MavenProject> getSortedProjects()
{
return Collections.singletonList( session.getCurrentProject() );
http://git-wip-us.apache.org/repos/asf/maven/blob/114ef6c5/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
----------------------------------------------------------------------
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
index b913caf..7af756d 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
@@ -169,6 +169,11 @@ public class ProjectDependencyGraphStub
return dependencies;
}
+ public List<MavenProject> getAllProjects()
+ {
+ return Arrays.asList( A, B, C, X, Y, Z, UNKNOWN );
+ }
+
public List<MavenProject> getSortedProjects()
{
return Arrays.asList( A, B, C, X, Y, Z ); // I'm not entirely sure about the order but this should do...