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 org.apache.maven.execution.MavenSession;
23 import org.apache.maven.execution.ProjectDependencyGraph;
24 import org.apache.maven.lifecycle.MavenExecutionPlan;
25 import org.apache.maven.plugin.MojoExecution;
26 import org.apache.maven.plugin.descriptor.MojoDescriptor;
27 import org.apache.maven.project.MavenProject;
28 import org.codehaus.plexus.component.annotations.Component;
29 import org.codehaus.plexus.component.annotations.Requirement;
30 import org.codehaus.plexus.logging.Logger;
31 import org.codehaus.plexus.util.StringUtils;
32
33 import java.util.Iterator;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.Set;
37 import java.util.TreeSet;
38
39
40
41
42
43
44
45
46
47
48
49 @Component( role = LifecycleDebugLogger.class )
50 public class LifecycleDebugLogger
51 {
52 @Requirement
53 private Logger logger;
54
55
56 public LifecycleDebugLogger()
57 {
58 }
59
60 public LifecycleDebugLogger( Logger logger )
61 {
62 this.logger = logger;
63 }
64
65
66 public void debug( String s )
67 {
68 logger.debug( s );
69 }
70
71 public void info( String s )
72 {
73 logger.info( s );
74 }
75
76 public void debugReactorPlan( ProjectBuildList projectBuilds )
77 {
78 if ( !logger.isDebugEnabled() )
79 {
80 return;
81 }
82
83 logger.debug( "=== REACTOR BUILD PLAN ================================================" );
84
85 for ( Iterator<ProjectSegment> it = projectBuilds.iterator(); it.hasNext(); )
86 {
87 ProjectSegment projectBuild = it.next();
88
89 logger.debug( "Project: " + projectBuild.getProject().getId() );
90 logger.debug( "Tasks: " + projectBuild.getTaskSegment().getTasks() );
91 logger.debug( "Style: " + ( projectBuild.getTaskSegment().isAggregating() ? "Aggregating" : "Regular" ) );
92
93 if ( it.hasNext() )
94 {
95 logger.debug( "-----------------------------------------------------------------------" );
96 }
97 }
98
99 logger.debug( "=======================================================================" );
100 }
101
102
103 public void debugProjectPlan( MavenProject currentProject, MavenExecutionPlan executionPlan )
104 {
105 if ( !logger.isDebugEnabled() )
106 {
107 return;
108 }
109
110 logger.debug( "=== PROJECT BUILD PLAN ================================================" );
111 logger.debug( "Project: " + BuilderCommon.getKey( currentProject ) );
112
113 debugDependencyRequirements( executionPlan.getMojoExecutions() );
114
115 logger.debug( "Repositories (dependencies): " + currentProject.getRemoteProjectRepositories() );
116 logger.debug( "Repositories (plugins) : " + currentProject.getRemotePluginRepositories() );
117
118 for ( ExecutionPlanItem mojoExecution : executionPlan )
119 {
120 debugMojoExecution( mojoExecution.getMojoExecution() );
121 }
122
123 logger.debug( "=======================================================================" );
124 }
125
126 private void debugMojoExecution( MojoExecution mojoExecution )
127 {
128 String mojoExecId =
129 mojoExecution.getGroupId() + ':' + mojoExecution.getArtifactId() + ':' + mojoExecution.getVersion() + ':'
130 + mojoExecution.getGoal() + " (" + mojoExecution.getExecutionId() + ')';
131
132 Map<String, List<MojoExecution>> forkedExecutions = mojoExecution.getForkedExecutions();
133 if ( !forkedExecutions.isEmpty() )
134 {
135 for ( Map.Entry<String, List<MojoExecution>> fork : forkedExecutions.entrySet() )
136 {
137 logger.debug( "--- init fork of " + fork.getKey() + " for " + mojoExecId + " ---" );
138
139 debugDependencyRequirements( fork.getValue() );
140
141 for ( MojoExecution forkedExecution : fork.getValue() )
142 {
143 debugMojoExecution( forkedExecution );
144 }
145
146 logger.debug( "--- exit fork of " + fork.getKey() + " for " + mojoExecId + " ---" );
147 }
148 }
149
150 logger.debug( "-----------------------------------------------------------------------" );
151 logger.debug( "Goal: " + mojoExecId );
152 logger.debug(
153 "Style: " + ( mojoExecution.getMojoDescriptor().isAggregator() ? "Aggregating" : "Regular" ) );
154 logger.debug( "Configuration: " + mojoExecution.getConfiguration() );
155 }
156
157 private void debugDependencyRequirements( List<MojoExecution> mojoExecutions )
158 {
159 Set<String> scopesToCollect = new TreeSet<String>();
160 Set<String> scopesToResolve = new TreeSet<String>();
161
162 for ( MojoExecution mojoExecution : mojoExecutions )
163 {
164 MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
165
166 String scopeToCollect = mojoDescriptor.getDependencyCollectionRequired();
167 if ( StringUtils.isNotEmpty( scopeToCollect ) )
168 {
169 scopesToCollect.add( scopeToCollect );
170 }
171
172 String scopeToResolve = mojoDescriptor.getDependencyResolutionRequired();
173 if ( StringUtils.isNotEmpty( scopeToResolve ) )
174 {
175 scopesToResolve.add( scopeToResolve );
176 }
177 }
178
179 logger.debug( "Dependencies (collect): " + scopesToCollect );
180 logger.debug( "Dependencies (resolve): " + scopesToResolve );
181 }
182
183 public void logWeavePlan( MavenSession session )
184 {
185 if ( !logger.isInfoEnabled() )
186 {
187 return;
188 }
189
190 final ProjectDependencyGraph dependencyGraph = session.getProjectDependencyGraph();
191 logger.info( "=== WEAVE CONCURRENCY BUILD PLAN ======================================" );
192 for ( MavenProject mavenProject : dependencyGraph.getSortedProjects() )
193 {
194
195 StringBuilder item = new StringBuilder();
196 item.append( "Project: " );
197 item.append( mavenProject.getArtifactId() );
198 final List<MavenProject> upstreamProjects = dependencyGraph.getUpstreamProjects( mavenProject, false );
199 if ( upstreamProjects.size() > 0 )
200 {
201 item.append( " ( " );
202 for ( Iterator<MavenProject> it = upstreamProjects.iterator(); it.hasNext(); )
203 {
204 final MavenProject kid = it.next();
205 item.append( kid.getArtifactId() );
206 if ( it.hasNext() )
207 {
208 item.append( ", " );
209 }
210 }
211 item.append( ")" );
212 }
213 logger.info( item.toString() );
214
215 }
216 logger.info( "=======================================================================" );
217 }
218 }