[MSHARED-266] always fork, since it is expected by cobertura plugin for example, but don't execute aggregate reports automatically added if not root execution
git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@1595568 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java b/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java
index 68bb64a..31f2af5 100644
--- a/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java
+++ b/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java
@@ -236,6 +236,13 @@
throw new MojoNotFoundException( report.getGoal(), pluginDescriptor );
}
+ MavenProject project = mavenReportExecutorRequest.getProject();
+ if ( !userDefinedReports && mojoDescriptor.isAggregator() && !canAggregate( project ) )
+ {
+ // aggregator mojos automatically added from plugin are only run at execution root
+ continue;
+ }
+
MojoExecution mojoExecution = new MojoExecution( plugin, report.getGoal(), null );
mojoExecution.setMojoDescriptor( mojoDescriptor );
@@ -267,32 +274,32 @@
new MavenReportExecution( report.getGoal(), mojoExecution.getPlugin(), mavenReport,
pluginDescriptor.getClassRealm() );
- if ( canGenerateReport( mavenReport, mojoExecution ) )
+ lifecycleExecutor.calculateForkedExecutions( mojoExecution,
+ mavenReportExecutorRequest.getMavenSession() );
+
+ if ( !mojoExecution.getForkedExecutions().isEmpty() )
{
- lifecycleExecutor.calculateForkedExecutions( mojoExecution,
- mavenReportExecutorRequest.getMavenSession() );
-
- if ( !mojoExecution.getForkedExecutions().isEmpty() )
+ String msg = report.getGoal() + " report requires ";
+ if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) )
{
- String msg = report.getGoal() + " report requires ";
- if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) )
- {
- // forked phase
- String lifecycleId =
- StringUtils.isEmpty( mojoDescriptor.getExecuteLifecycle() ) ? ""
- : ( '[' + mojoDescriptor.getExecuteLifecycle() + ']' );
- logger.info( msg + lifecycleId + mojoDescriptor.getExecutePhase() + " forked phase execution" );
- }
- else
- {
- // forked goal
- logger.info( msg + mojoDescriptor.getExecuteGoal() + " forked goal execution" );
- }
-
- lifecycleExecutor.executeForkedExecutions( mojoExecution,
- mavenReportExecutorRequest.getMavenSession() );
+ // forked phase
+ String lifecycleId =
+ StringUtils.isEmpty( mojoDescriptor.getExecuteLifecycle() ) ? ""
+ : ( '[' + mojoDescriptor.getExecuteLifecycle() + ']' );
+ logger.info( msg + lifecycleId + mojoDescriptor.getExecutePhase() + " forked phase execution" );
+ }
+ else
+ {
+ // forked goal
+ logger.info( msg + mojoDescriptor.getExecuteGoal() + " forked goal execution" );
}
+ lifecycleExecutor.executeForkedExecutions( mojoExecution,
+ mavenReportExecutorRequest.getMavenSession() );
+ }
+
+ if ( canGenerateReport( mavenReport, mojoExecution ) )
+ {
reports.add( mavenReportExecution );
}
}
@@ -300,6 +307,12 @@
return reports;
}
+ private boolean canAggregate( MavenProject project )
+ {
+ return project.isExecutionRoot() && "pom".equals( project.getPackaging() ) && ( project.getModules() != null )
+ && !project.getModules().isEmpty();
+ }
+
private boolean canGenerateReport( MavenReport mavenReport, MojoExecution mojoExecution )
{
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();