1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  package org.apache.maven.lifecycle;
20  
21  import java.util.Arrays;
22  import java.util.List;
23  import java.util.Set;
24  import javax.inject.Inject;
25  import javax.inject.Named;
26  import javax.inject.Singleton;
27  import org.apache.maven.execution.MavenSession;
28  import org.apache.maven.lifecycle.internal.LifecycleExecutionPlanCalculator;
29  import org.apache.maven.lifecycle.internal.LifecycleStarter;
30  import org.apache.maven.lifecycle.internal.LifecycleTaskSegmentCalculator;
31  import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
32  import org.apache.maven.lifecycle.internal.MojoExecutor;
33  import org.apache.maven.lifecycle.internal.ProjectIndex;
34  import org.apache.maven.lifecycle.internal.TaskSegment;
35  import org.apache.maven.model.Plugin;
36  import org.apache.maven.plugin.InvalidPluginDescriptorException;
37  import org.apache.maven.plugin.MojoExecution;
38  import org.apache.maven.plugin.MojoNotFoundException;
39  import org.apache.maven.plugin.PluginDescriptorParsingException;
40  import org.apache.maven.plugin.PluginManagerException;
41  import org.apache.maven.plugin.PluginNotFoundException;
42  import org.apache.maven.plugin.PluginResolutionException;
43  import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
44  import org.apache.maven.plugin.version.PluginVersionResolutionException;
45  import org.apache.maven.project.MavenProject;
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  @Named
57  @Singleton
58  public class DefaultLifecycleExecutor implements LifecycleExecutor {
59  
60      private final LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer;
61      private final DefaultLifecycles defaultLifeCycles;
62      private final LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator;
63      private final LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator;
64      private final MojoExecutor mojoExecutor;
65      private final LifecycleStarter lifecycleStarter;
66      private final MojoDescriptorCreator mojoDescriptorCreator;
67  
68      @Inject
69      public DefaultLifecycleExecutor(
70              LifeCyclePluginAnalyzer lifeCyclePluginAnalyzer,
71              DefaultLifecycles defaultLifeCycles,
72              LifecycleTaskSegmentCalculator lifecycleTaskSegmentCalculator,
73              LifecycleExecutionPlanCalculator lifecycleExecutionPlanCalculator,
74              MojoExecutor mojoExecutor,
75              LifecycleStarter lifecycleStarter,
76              MojoDescriptorCreator mojoDescriptorCreator) {
77          this.lifeCyclePluginAnalyzer = lifeCyclePluginAnalyzer;
78          this.defaultLifeCycles = defaultLifeCycles;
79          this.lifecycleTaskSegmentCalculator = lifecycleTaskSegmentCalculator;
80          this.lifecycleExecutionPlanCalculator = lifecycleExecutionPlanCalculator;
81          this.mojoExecutor = mojoExecutor;
82          this.lifecycleStarter = lifecycleStarter;
83          this.mojoDescriptorCreator = mojoDescriptorCreator;
84      }
85  
86      public void execute(MavenSession session) {
87          lifecycleStarter.execute(session);
88      }
89  
90      
91      
92      
93      
94  
95      
96      
97      
98      
99      
100     
101 
102     public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles(String packaging) {
103         return lifeCyclePluginAnalyzer.getPluginsBoundByDefaultToAllLifecycles(packaging);
104     }
105 
106     
107 
108     @SuppressWarnings({"UnusedDeclaration"})
109     public MavenExecutionPlan calculateExecutionPlan(MavenSession session, boolean setup, String... tasks)
110             throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
111                     MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
112                     PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
113                     PluginVersionResolutionException {
114         List<TaskSegment> taskSegments =
115                 lifecycleTaskSegmentCalculator.calculateTaskSegments(session, Arrays.asList(tasks));
116 
117         TaskSegment mergedSegment = new TaskSegment(false);
118 
119         for (TaskSegment taskSegment : taskSegments) {
120             mergedSegment.getTasks().addAll(taskSegment.getTasks());
121         }
122 
123         return lifecycleExecutionPlanCalculator.calculateExecutionPlan(
124                 session, session.getCurrentProject(), mergedSegment.getTasks(), setup);
125     }
126 
127     public MavenExecutionPlan calculateExecutionPlan(MavenSession session, String... tasks)
128             throws PluginNotFoundException, PluginResolutionException, PluginDescriptorParsingException,
129                     MojoNotFoundException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
130                     PluginManagerException, LifecyclePhaseNotFoundException, LifecycleNotFoundException,
131                     PluginVersionResolutionException {
132         return calculateExecutionPlan(session, true, tasks);
133     }
134 
135     
136     public void calculateForkedExecutions(MojoExecution mojoExecution, MavenSession session)
137             throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
138                     PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
139                     LifecyclePhaseNotFoundException, LifecycleNotFoundException, PluginVersionResolutionException {
140         lifecycleExecutionPlanCalculator.calculateForkedExecutions(mojoExecution, session);
141     }
142 
143     
144     public List<MavenProject> executeForkedExecutions(MojoExecution mojoExecution, MavenSession session)
145             throws LifecycleExecutionException {
146         return mojoExecutor.executeForkedExecutions(mojoExecution, session, new ProjectIndex(session.getProjects()));
147     }
148 }