Author: hboutemy Date: Sat Oct 22 20:17:03 2016 New Revision: 1766230 URL: http://svn.apache.org/viewvc?rev=1766230&view=rev Log: refactoring
Modified: maven/shared/trunk/maven-reporting-exec/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java Modified: maven/shared/trunk/maven-reporting-exec/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-reporting-exec/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java?rev=1766230&r1=1766229&r2=1766230&view=diff ============================================================================== --- maven/shared/trunk/maven-reporting-exec/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java (original) +++ maven/shared/trunk/maven-reporting-exec/src/main/java/org/apache/maven/reporting/exec/DefaultMavenReportExecutor.java Sat Oct 22 20:17:03 2016 @@ -26,7 +26,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.apache.maven.execution.MavenSession; import org.apache.maven.lifecycle.LifecycleExecutor; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.MavenPluginManager; @@ -74,7 +73,7 @@ import org.codehaus.plexus.util.xml.Xpp3 * Following steps are done: * <ul> * <li>get {@link PluginDescriptor} from the {@link MavenPluginManager} (through - * {@link MavenPluginManagerHelper#getPluginDescriptor(Plugin, MavenSession) + * {@link MavenPluginManagerHelper#getPluginDescriptor(Plugin, org.apache.maven.execution.MavenSession) * MavenPluginManagerHelper.getPluginDescriptor(...)} to protect from core API change)</li> * <li>setup a {@link ClassLoader}, with the Site plugin classloader as parent for the report execution. <br> * Notice that some classes are imported from the current Site plugin ClassRealm: see {@link #IMPORTS}. Corresponding @@ -169,159 +168,178 @@ public class DefaultMavenReportExecutor plugin.setGroupId( reportPlugin.getGroupId() ); plugin.setArtifactId( reportPlugin.getArtifactId() ); plugin.setVersion( resolvePluginVersion( reportPlugin, mavenReportExecutorRequest ) ); + logger.info( "configuring report plugin " + plugin.getId() ); mergePluginToReportPlugin( mavenReportExecutorRequest, plugin, reportPlugin ); - logger.info( "configuring report plugin " + plugin.getId() ); + PluginDescriptor pluginDescriptor = + mavenPluginManagerHelper.getPluginDescriptor( plugin, mavenReportExecutorRequest.getMavenSession() ); - MavenSession session = mavenReportExecutorRequest.getMavenSession(); + // step 2: prepare the goals + List<GoalWithConf> goalsWithConfiguration = new ArrayList<GoalWithConf>(); + boolean hasUserDefinedReports = prepareGoals( reportPlugin, pluginDescriptor, goalsWithConfiguration ); - PluginDescriptor pluginDescriptor = mavenPluginManagerHelper.getPluginDescriptor( plugin, session ); + // step 3: prepare the reports + List<MavenReportExecution> reports = new ArrayList<MavenReportExecution>(); + for ( GoalWithConf report : goalsWithConfiguration ) + { + MavenReportExecution mavenReportExecution = + prepareReportExecution( mavenReportExecutorRequest, report, hasUserDefinedReports ); + if ( mavenReportExecution != null ) + { + // ok, report is ready to generate + reports.add( mavenReportExecution ); + } + } - // step 2: prepare the goals - List<GoalWithConf> goalsWithConfiguration = new ArrayList<GoalWithConf>(); - boolean userDefinedReports = true; + return reports; + } + private boolean prepareGoals( ReportPlugin reportPlugin, PluginDescriptor pluginDescriptor, + List<GoalWithConf> goalsWithConfiguration ) + { if ( reportPlugin.getReportSets().isEmpty() && reportPlugin.getReports().isEmpty() ) { // by default, use every goal, which will be filtered later to only keep reporting goals - userDefinedReports = false; List<MojoDescriptor> mojoDescriptors = pluginDescriptor.getMojos(); for ( MojoDescriptor mojoDescriptor : mojoDescriptors ) { - goalsWithConfiguration.add( new GoalWithConf( mojoDescriptor.getGoal(), + goalsWithConfiguration.add( new GoalWithConf( reportPlugin, pluginDescriptor, mojoDescriptor.getGoal(), mojoDescriptor.getConfiguration() ) ); } + + return false; + } + + Set<String> goals = new HashSet<String>(); + for ( String report : reportPlugin.getReports() ) + { + if ( goals.add( report ) ) + { + goalsWithConfiguration.add( new GoalWithConf( reportPlugin, pluginDescriptor, report, + reportPlugin.getConfiguration() ) ); + } + else + { + logger.warn( report + " report is declared twice in default reports" ); + } } - else + + for ( ReportSet reportSet : reportPlugin.getReportSets() ) { - Set<String> goals = new HashSet<String>(); - for ( String report : reportPlugin.getReports() ) + goals = new HashSet<String>(); + for ( String report : reportSet.getReports() ) { if ( goals.add( report ) ) { - goalsWithConfiguration.add( new GoalWithConf( report, reportPlugin.getConfiguration() ) ); + goalsWithConfiguration.add( new GoalWithConf( reportPlugin, pluginDescriptor, report, + reportSet.getConfiguration() ) ); } else { - logger.warn( report + " report is declared twice in default reports" ); - } - } - - for ( ReportSet reportSet : reportPlugin.getReportSets() ) - { - goals = new HashSet<String>(); - for ( String report : reportSet.getReports() ) - { - if ( goals.add( report ) ) - { - goalsWithConfiguration.add( new GoalWithConf( report, reportSet.getConfiguration() ) ); - } - else - { - logger.warn( report + " report is declared twice in " + reportSet.getId() + " reportSet" ); - } + logger.warn( report + " report is declared twice in " + reportSet.getId() + " reportSet" ); } } } + return true; + } - // step 3: prepare the reports - List<MavenReportExecution> reports = new ArrayList<MavenReportExecution>(); - for ( GoalWithConf report : goalsWithConfiguration ) + private MavenReportExecution prepareReportExecution( MavenReportExecutorRequest mavenReportExecutorRequest, + GoalWithConf report, boolean hasUserDefinedReports ) + throws Exception + { + ReportPlugin reportPlugin = report.getReportPlugin(); + PluginDescriptor pluginDescriptor = report.getPluginDescriptor(); + + MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( report.getGoal() ); + if ( mojoDescriptor == null ) { - MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( report.getGoal() ); - if ( mojoDescriptor == null ) - { - throw new MojoNotFoundException( report.getGoal(), pluginDescriptor ); - } + 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; - } + MavenProject project = mavenReportExecutorRequest.getProject(); + if ( !hasUserDefinedReports && mojoDescriptor.isAggregator() && !canAggregate( project ) ) + { + // aggregator mojos automatically added from plugin are only run at execution root + return null; + } - MojoExecution mojoExecution = new MojoExecution( plugin, report.getGoal(), null ); + MojoExecution mojoExecution = new MojoExecution( pluginDescriptor.getPlugin(), report.getGoal(), null ); - mojoExecution.setMojoDescriptor( mojoDescriptor ); + mojoExecution.setMojoDescriptor( mojoDescriptor ); - mavenPluginManagerHelper.setupPluginRealm( pluginDescriptor, mavenReportExecutorRequest.getMavenSession(), - Thread.currentThread().getContextClassLoader(), IMPORTS, - EXCLUDES ); + mavenPluginManagerHelper.setupPluginRealm( pluginDescriptor, mavenReportExecutorRequest.getMavenSession(), + Thread.currentThread().getContextClassLoader(), IMPORTS, + EXCLUDES ); - if ( !isMavenReport( mojoExecution, pluginDescriptor ) ) + if ( !isMavenReport( mojoExecution, pluginDescriptor ) ) + { + if ( hasUserDefinedReports ) { - if ( userDefinedReports ) - { - // reports were explicitly written in the POM - logger.warn( "ignoring " + mojoExecution.getPlugin().getId() + ':' + report.getGoal() - + " goal since it is not a report: should be removed from reporting configuration in POM" ); - } - continue; + // reports were explicitly written in the POM + logger.warn( "ignoring " + mojoExecution.getPlugin().getId() + ':' + report.getGoal() + + " goal since it is not a report: should be removed from reporting configuration in POM" ); } + return null; + } - Xpp3Dom pluginMgmtConfiguration = null; - if ( project.getBuild() != null && project.getBuild().getPluginManagement() != null ) - { - Plugin pluginMgmt = find( reportPlugin, project.getBuild().getPluginManagement().getPlugins() ); + Xpp3Dom pluginMgmtConfiguration = null; + if ( project.getBuild() != null && project.getBuild().getPluginManagement() != null ) + { + Plugin pluginMgmt = find( reportPlugin, project.getBuild().getPluginManagement().getPlugins() ); - if ( pluginMgmt != null ) - { - pluginMgmtConfiguration = (Xpp3Dom) pluginMgmt.getConfiguration(); - } + if ( pluginMgmt != null ) + { + pluginMgmtConfiguration = (Xpp3Dom) pluginMgmt.getConfiguration(); } + } - mojoExecution.setConfiguration( mergeConfiguration( mojoDescriptor.getMojoConfiguration(), - pluginMgmtConfiguration, - reportPlugin.getConfiguration(), - report.getConfiguration(), - mojoDescriptor.getParameterMap().keySet() ) ); + mojoExecution.setConfiguration( mergeConfiguration( mojoDescriptor.getMojoConfiguration(), + pluginMgmtConfiguration, + reportPlugin.getConfiguration(), + report.getConfiguration(), + mojoDescriptor.getParameterMap().keySet() ) ); - MavenReport mavenReport = - getConfiguredMavenReport( mojoExecution, pluginDescriptor, mavenReportExecutorRequest ); + MavenReport mavenReport = + getConfiguredMavenReport( mojoExecution, pluginDescriptor, mavenReportExecutorRequest ); - MavenReportExecution mavenReportExecution = - new MavenReportExecution( report.getGoal(), mojoExecution.getPlugin(), mavenReport, - pluginDescriptor.getClassRealm() ); + MavenReportExecution mavenReportExecution = + new MavenReportExecution( report.getGoal(), mojoExecution.getPlugin(), mavenReport, + pluginDescriptor.getClassRealm() ); - lifecycleExecutor.calculateForkedExecutions( mojoExecution, - mavenReportExecutorRequest.getMavenSession() ); + lifecycleExecutor.calculateForkedExecutions( mojoExecution, + mavenReportExecutorRequest.getMavenSession() ); - if ( !mojoExecution.getForkedExecutions().isEmpty() ) - { - String reportDescription = pluginDescriptor.getArtifactId() + ":" + report.getGoal() + " report"; + if ( !mojoExecution.getForkedExecutions().isEmpty() ) + { + String reportDescription = pluginDescriptor.getArtifactId() + ":" + report.getGoal() + " report"; - String execution; - if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) ) - { - // forked phase - execution = "'" - + ( StringUtils.isEmpty( mojoDescriptor.getExecuteLifecycle() ) ? "" - : ( '[' + mojoDescriptor.getExecuteLifecycle() + ']' ) ) - + mojoDescriptor.getExecutePhase() + "' forked phase execution"; - } - else - { - // forked goal - execution = "'" + mojoDescriptor.getExecuteGoal() + "' forked goal execution"; - } + String execution; + if ( StringUtils.isNotEmpty( mojoDescriptor.getExecutePhase() ) ) + { + // forked phase + execution = "'" + + ( StringUtils.isEmpty( mojoDescriptor.getExecuteLifecycle() ) ? "" + : ( '[' + mojoDescriptor.getExecuteLifecycle() + ']' ) ) + + mojoDescriptor.getExecutePhase() + "' forked phase execution"; + } + else + { + // forked goal + execution = "'" + mojoDescriptor.getExecuteGoal() + "' forked goal execution"; + } - logger.info( "preparing " + reportDescription + " requires " + execution ); + logger.info( "preparing " + reportDescription + " requires " + execution ); - lifecycleExecutor.executeForkedExecutions( mojoExecution, - mavenReportExecutorRequest.getMavenSession() ); + lifecycleExecutor.executeForkedExecutions( mojoExecution, + mavenReportExecutorRequest.getMavenSession() ); - logger.info( execution + " for " + reportDescription + " preparation done" ); - } - - // ok, report is ready to generate - reports.add( mavenReportExecution ); + logger.info( execution + " for " + reportDescription + " preparation done" ); } - return reports; + return mavenReportExecution; } private boolean canAggregate( MavenProject project ) @@ -654,12 +672,29 @@ public class DefaultMavenReportExecutor private final PlexusConfiguration configuration; - public GoalWithConf( String goal, PlexusConfiguration configuration ) + private final ReportPlugin reportPlugin; + + private final PluginDescriptor pluginDescriptor; + + public GoalWithConf( ReportPlugin reportPlugin, PluginDescriptor pluginDescriptor, String goal, + PlexusConfiguration configuration ) { + this.reportPlugin = reportPlugin; + this.pluginDescriptor = pluginDescriptor; this.goal = goal; this.configuration = configuration; } + public ReportPlugin getReportPlugin() + { + return reportPlugin; + } + + public PluginDescriptor getPluginDescriptor() + { + return pluginDescriptor; + } + public String getGoal() { return goal;