1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.lifecycle.internal;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24
25 import org.apache.maven.execution.MavenSession;
26 import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
27 import org.apache.maven.project.MavenProject;
28 import org.codehaus.plexus.component.annotations.Component;
29
30
31
32
33
34
35
36 @Component(role = BuildListCalculator.class)
37 public class BuildListCalculator {
38 public ProjectBuildList calculateProjectBuilds(MavenSession session, List<TaskSegment> taskSegments) {
39 List<ProjectSegment> projectBuilds = new ArrayList<>();
40
41 MavenProject rootProject = session.getTopLevelProject();
42
43 for (TaskSegment taskSegment : taskSegments) {
44 List<MavenProject> projects;
45
46 if (taskSegment.isAggregating()) {
47 projects = Collections.singletonList(rootProject);
48 } else {
49 projects = session.getProjects();
50 }
51 for (MavenProject project : projects) {
52 ClassLoader tccl = Thread.currentThread().getContextClassLoader();
53 MavenProject currentProject = session.getCurrentProject();
54 try {
55 BuilderCommon.attachToThread(project);
56 session.setCurrentProject(project);
57 projectBuilds.add(new ProjectSegment(project, taskSegment, session));
58 } finally {
59 session.setCurrentProject(currentProject);
60 Thread.currentThread().setContextClassLoader(tccl);
61 }
62 }
63 }
64 return new ProjectBuildList(projectBuilds);
65 }
66 }