diff --git a/.drone.yml b/.drone.yml
index 0959ba3..62379b1 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -30,7 +30,7 @@ steps:
mount:
- .repo
- - name: mavenjdk8
+ - name: mavenjdk11
pull: always
image: docker.io/maven:3.8.4-openjdk-11-slim
volumes:
diff --git a/src/main/java/com/soebes/maven/extensions/BuildTimeProfiler.java b/src/main/java/com/soebes/maven/extensions/BuildTimeProfiler.java
index d09cbad..cb2d320 100644
--- a/src/main/java/com/soebes/maven/extensions/BuildTimeProfiler.java
+++ b/src/main/java/com/soebes/maven/extensions/BuildTimeProfiler.java
@@ -24,6 +24,8 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.function.BiConsumer;
+import java.util.stream.Collectors;
import javax.inject.Named;
import javax.inject.Singleton;
@@ -47,6 +49,8 @@
import com.soebes.maven.extensions.metadata.MetadataDownloadTimer;
import com.soebes.maven.extensions.metadata.MetadataInstallTimer;
+import static com.soebes.maven.extensions.ProjectKey.fromMavenProject;
+
/**
* @author Karl Heinz Marbaise kama@soebes.de
*/
@@ -57,6 +61,8 @@ public class BuildTimeProfiler
{
private static final Logger LOGGER = LoggerFactory.getLogger(BuildTimeProfiler.class);
+ private static final String DIVIDER = "------------------------------------------------------------------------";
+
final List lifeCyclePhases;
private final DiscoveryTimer discoveryTimer;
@@ -397,59 +403,21 @@ private void executionResultEventHandler( MavenExecutionResult event )
LOGGER.debug( "MBTP: executionResultEventHandler: {}", event.getProject() );
LOGGER.info( "-- Maven Build Time Profiler Summary --" );
- LOGGER.info( "------------------------------------------------------------------------" );
+ LOGGER.info(DIVIDER);
discoveryTimer.report();
if ( mojoTimer.hasEvents() )
{
- LOGGER.info( "Project Build Time (reactor order):" );
- LOGGER.info( "" );
- for ( MavenProject mavenProject : event.getTopologicallySortedProjects() )
- {
- LOGGER.info( "{}:", mavenProject.getName() );
-
- for ( String phase : lifeCyclePhases )
- {
- ProjectKey projectKey = mavenProjectToProjectKey( mavenProject );
-
- if ( !mojoTimer.hasTimeForProjectAndPhase( projectKey, phase ) )
- {
- continue;
- }
+ logProjects(event);
+ LOGGER.info(DIVIDER);
- long timeForPhaseAndProjectInMillis =
- mojoTimer.getTimeForProjectAndPhaseInMillis( projectKey, phase );
- LOGGER.info( " {} ms : {}", String.format( "%8d", timeForPhaseAndProjectInMillis ), phase );
-
- }
-
- }
- LOGGER.info( "------------------------------------------------------------------------" );
- LOGGER.info( "Lifecycle Phase summary:" );
- LOGGER.info( "" );
- for ( String phase : lifeCyclePhases )
- {
- long timeForPhaseInMillis = mojoTimer.getTimeForPhaseInMillis( phase );
- LOGGER.info( "{} ms : {}", String.format( "%8d", timeForPhaseInMillis ), phase );
- }
+ logPhaseSummary();
+ LOGGER.info(DIVIDER);
// List all plugins per phase
- LOGGER.info( "------------------------------------------------------------------------" );
- LOGGER.info( "Plugins in lifecycle Phases:" );
- LOGGER.info( "" );
- for ( String phase : lifeCyclePhases )
- {
- LOGGER.info( "{}:", phase );
- Map plugisInPhase = mojoTimer.getPluginsInPhase( phase );
- for ( Entry pluginInPhase : plugisInPhase.entrySet() )
- {
- LOGGER.info( "{} ms: {}", String.format( "%8d", pluginInPhase.getValue().getElapsedTime() ),
- pluginInPhase.getKey().getMojo().getFullId() );
- }
-
- }
- LOGGER.info( "------------------------------------------------------------------------" );
+ logDetailedPhaseExecutions();
+ LOGGER.info(DIVIDER);
}
if ( goalTimer.hasEvents() )
@@ -457,7 +425,7 @@ private void executionResultEventHandler( MavenExecutionResult event )
LOGGER.info( "Plugins directly called via goals:" );
LOGGER.info( "" );
goalTimer.report();
- LOGGER.info( "------------------------------------------------------------------------" );
+ LOGGER.info(DIVIDER);
}
installTimer.report();
@@ -471,9 +439,59 @@ private void executionResultEventHandler( MavenExecutionResult event )
forkProject.report();
}
- private ProjectKey mavenProjectToProjectKey( MavenProject project )
+
+ private void logProjects(MavenExecutionResult event)
+ {
+ LOGGER.info( "Project Build Time (reactor order):" );
+ LOGGER.info( "" );
+ for ( MavenProject mavenProject : event.getTopologicallySortedProjects() )
+ {
+ LOGGER.info( "{}:", mavenProject.getName() );
+
+ for ( String phase : lifeCyclePhases )
+ {
+ ProjectKey projectKey = fromMavenProject( mavenProject );
+
+ if ( !mojoTimer.hasTimeForProjectAndPhase( projectKey, phase ) )
+ {
+ continue;
+ }
+
+ logTime( mojoTimer.getTimeForProjectAndPhaseInMillis( projectKey, phase ), phase );
+ }
+
+ }
+ }
+
+ private void logPhaseSummary()
+ {
+ LOGGER.info( "Lifecycle Phase summary:" );
+ LOGGER.info( "" );
+ for ( String phase : lifeCyclePhases )
+ {
+ logTime( mojoTimer.getTimeForPhaseInMillis( phase ), phase );
+ }
+ }
+
+ private void logDetailedPhaseExecutions()
+ {
+ LOGGER.info( "Plugins in lifecycle Phases:" );
+ LOGGER.info( "" );
+ for ( String phase : lifeCyclePhases )
+ {
+ LOGGER.info( "{}:", phase );
+ Map plugisInPhase = mojoTimer.getPluginsInPhase( phase );
+ for ( Entry pluginInPhase : plugisInPhase.entrySet() )
+ {
+ logTime( pluginInPhase.getValue().getElapsedTime(), pluginInPhase.getKey().getLifecycleId() );
+ }
+
+ }
+ }
+
+ private void logTime(long millis, String label)
{
- return new ProjectKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
+ LOGGER.info( "{} ms : {}", String.format( "%8d", millis ), label );
}
private void collectAllLifeCylcePhases( String phase )
diff --git a/src/main/java/com/soebes/maven/extensions/GoalTimer.java b/src/main/java/com/soebes/maven/extensions/GoalTimer.java
index 980bfca..28f35d1 100644
--- a/src/main/java/com/soebes/maven/extensions/GoalTimer.java
+++ b/src/main/java/com/soebes/maven/extensions/GoalTimer.java
@@ -6,10 +6,11 @@
import org.apache.maven.execution.ExecutionEvent;
import org.apache.maven.plugin.MojoExecution;
-import org.apache.maven.project.MavenProject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static com.soebes.maven.extensions.ProjectKey.fromMavenProject;
+
/**
* @author Karl Heinz Marbaise kama@soebes.de
*/
@@ -29,11 +30,6 @@ public boolean hasEvents()
return !timerEvents.isEmpty();
}
- private ProjectKey createProjectKey( MavenProject project )
- {
- return new ProjectKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
- }
-
private GoalKey createGoalKey( MojoExecution mojo )
{
return new GoalKey( mojo.getGroupId(), mojo.getArtifactId(), mojo.getVersion(), mojo.getGoal(),
@@ -43,14 +39,14 @@ private GoalKey createGoalKey( MojoExecution mojo )
public void mojoStart( ExecutionEvent event )
{
ProjectGoal pm =
- new ProjectGoal( createProjectKey( event.getProject() ), createGoalKey( event.getMojoExecution() ) );
+ new ProjectGoal( fromMavenProject(event.getProject()), createGoalKey(event.getMojoExecution() ) );
timerEvents.put( pm, new SystemTime().start() );
}
public void mojoStop( ExecutionEvent event )
{
ProjectGoal pm =
- new ProjectGoal( createProjectKey( event.getProject() ), createGoalKey( event.getMojoExecution() ) );
+ new ProjectGoal( fromMavenProject(event.getProject()), createGoalKey(event.getMojoExecution() ) );
if ( !timerEvents.containsKey( pm ) )
{
throw new IllegalArgumentException( "Unknown mojoId (" + pm.getId() + ")" );
diff --git a/src/main/java/com/soebes/maven/extensions/MojoKey.java b/src/main/java/com/soebes/maven/extensions/MojoKey.java
index 884edb8..b223488 100644
--- a/src/main/java/com/soebes/maven/extensions/MojoKey.java
+++ b/src/main/java/com/soebes/maven/extensions/MojoKey.java
@@ -19,6 +19,8 @@
* under the License.
*/
+import org.apache.maven.plugin.MojoExecution;
+
/**
* @author Karl Heinz Marbaise kama@soebes.de
*/
@@ -31,6 +33,11 @@ class MojoKey
private String phase;
+ public static MojoKey fromMojo(MojoExecution mojo) {
+ return new MojoKey( mojo.getGroupId(), mojo.getArtifactId(), mojo.getVersion(), mojo.getGoal(),
+ mojo.getExecutionId(), mojo.getLifecyclePhase() );
+ }
+
public MojoKey( String groupId, String artifactId, String version, String goal, String executionId,
String lifeCyclePhase )
{
@@ -75,6 +82,11 @@ public String getFullId()
return super.getId() + ":" + getGoal() + " (" + getExecutionId() + ")";
}
+ public String getFullIdWithPhase()
+ {
+ return super.getId() + ":" + getGoal() + " (" + getExecutionId() + ":" + getPhase() + ")";
+ }
+
@Override
public int hashCode()
{
diff --git a/src/main/java/com/soebes/maven/extensions/MojoTimer.java b/src/main/java/com/soebes/maven/extensions/MojoTimer.java
index 98f65af..dcd4319 100644
--- a/src/main/java/com/soebes/maven/extensions/MojoTimer.java
+++ b/src/main/java/com/soebes/maven/extensions/MojoTimer.java
@@ -30,6 +30,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static com.soebes.maven.extensions.MojoKey.fromMojo;
+
/**
* @author Karl Heinz Marbaise kama@soebes.de
*/
@@ -44,17 +46,6 @@ public MojoTimer()
this.timerEvents = new ConcurrentHashMap<>();
}
- private ProjectKey createProjectKey( MavenProject project )
- {
- return new ProjectKey( project.getGroupId(), project.getArtifactId(), project.getVersion() );
- }
-
- private MojoKey createMojoKey( MojoExecution mojo )
- {
- return new MojoKey( mojo.getGroupId(), mojo.getArtifactId(), mojo.getVersion(), mojo.getGoal(),
- mojo.getExecutionId(), mojo.getLifecyclePhase() );
- }
-
public boolean hasEvents()
{
return !this.timerEvents.isEmpty();
@@ -63,15 +54,13 @@ public boolean hasEvents()
public void mojoStart( ExecutionEvent event )
{
- ProjectMojo pm =
- new ProjectMojo( createProjectKey( event.getProject() ), createMojoKey( event.getMojoExecution() ) );
+ ProjectMojo pm = new ProjectMojo( event.getProject(), fromMojo( event.getMojoExecution() ) );
timerEvents.put( pm, new SystemTime().start() );
}
public void mojoStop( ExecutionEvent event )
{
- ProjectMojo pm =
- new ProjectMojo( createProjectKey( event.getProject() ), createMojoKey( event.getMojoExecution() ) );
+ ProjectMojo pm = new ProjectMojo( event.getProject(), fromMojo( event.getMojoExecution() ) );
if ( !timerEvents.containsKey( pm ) )
{
throw new IllegalArgumentException( "Unknown mojoId (" + pm + ")" );
@@ -139,7 +128,7 @@ public void report()
{
for ( Entry item : this.timerEvents.entrySet() )
{
- LOGGER.info( "{} : {}", item.getKey().getId(), item.getValue().getElapsedTime() );
+ LOGGER.info( "{} : {}", item.getKey().getFullId(), item.getValue().getElapsedTime() );
}
}
}
diff --git a/src/main/java/com/soebes/maven/extensions/ProjectKey.java b/src/main/java/com/soebes/maven/extensions/ProjectKey.java
index 4b637eb..4d4aa11 100644
--- a/src/main/java/com/soebes/maven/extensions/ProjectKey.java
+++ b/src/main/java/com/soebes/maven/extensions/ProjectKey.java
@@ -19,6 +19,8 @@
* under the License.
*/
+import org.apache.maven.project.MavenProject;
+
/**
* @author Karl Heinz Marbaise kama@soebes.de
*/
@@ -30,6 +32,10 @@ class ProjectKey
private final String version;
+ public static ProjectKey fromMavenProject(MavenProject project) {
+ return new ProjectKey(project.getGroupId(), project.getArtifactId(), project.getVersion());
+ }
+
public ProjectKey( final String groupId, final String artifactId, final String version )
{
super();
diff --git a/src/main/java/com/soebes/maven/extensions/ProjectMojo.java b/src/main/java/com/soebes/maven/extensions/ProjectMojo.java
index 7d9265f..c19d161 100644
--- a/src/main/java/com/soebes/maven/extensions/ProjectMojo.java
+++ b/src/main/java/com/soebes/maven/extensions/ProjectMojo.java
@@ -19,6 +19,10 @@
* under the License.
*/
+import org.apache.maven.project.MavenProject;
+
+import static com.soebes.maven.extensions.ProjectKey.fromMavenProject;
+
/**
* @author Karl Heinz Marbaise kama@soebes.de
*/
@@ -26,12 +30,15 @@ class ProjectMojo
{
private ProjectKey project;
+ private String projectName;
+
private MojoKey mojo;
- public ProjectMojo( ProjectKey project, MojoKey mojo )
+ public ProjectMojo( MavenProject project, MojoKey mojo )
{
super();
- this.project = project;
+ this.project = fromMavenProject( project );
+ this.projectName = project.getName();
this.mojo = mojo;
}
@@ -65,12 +72,14 @@ public int hashCode()
return result;
}
- public String getId()
+ public String getLifecycleId()
+ {
+ return projectName + "@" + mojo.getFullId();
+ }
+
+ public String getFullId()
{
- String s1 = getMojo().getGroupId() + ":" + getMojo().getArtifactId() + ":" + getMojo().getVersion() + ":"
- + getMojo().getGoal() + " (" + getMojo().getExecutionId() + ":" + getMojo().getPhase() + ")";
- String s2 = getProject().getGroupId() + ":" + getProject().getArtifactId() + ":" + getProject().getVersion();
- return s1 + " @ " + s2;
+ return mojo.getFullIdWithPhase() + " @ " + project.getId();
}
@Override