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 javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.List;
27
28 import org.apache.maven.execution.MavenSession;
29 import org.apache.maven.lifecycle.internal.builder.BuilderCommon;
30 import org.apache.maven.project.MavenProject;
31
32
33
34
35
36
37
38 @Named
39 @Singleton
40 public class BuildListCalculator {
41 public ProjectBuildList calculateProjectBuilds(MavenSession session, List<TaskSegment> taskSegments) {
42 List<ProjectSegment> projectBuilds = new ArrayList<>();
43
44 MavenProject rootProject = session.getTopLevelProject();
45
46 for (TaskSegment taskSegment : taskSegments) {
47 List<MavenProject> projects;
48
49 if (taskSegment.isAggregating()) {
50 projects = Collections.singletonList(rootProject);
51 } else {
52 projects = session.getProjects();
53 }
54 for (MavenProject project : projects) {
55 ClassLoader tccl = Thread.currentThread().getContextClassLoader();
56 MavenProject currentProject = session.getCurrentProject();
57 try {
58 BuilderCommon.attachToThread(project);
59 session.setCurrentProject(project);
60 projectBuilds.add(new ProjectSegment(project, taskSegment, session));
61 } finally {
62 session.setCurrentProject(currentProject);
63 Thread.currentThread().setContextClassLoader(tccl);
64 }
65 }
66 }
67 return new ProjectBuildList(projectBuilds);
68 }
69 }