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