[ http://jira.codehaus.org/browse/MSITE-504?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=235656#action_235656 ]
Marvin Froeder edited comment on MSITE-504 at 9/17/10 3:03 PM: --------------------------------------------------------------- I came up with a quick dirty patch, not sure if that is the best way to deal with the problem but it did solve my problems here. {code} Index: src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java =================================================================== --- src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java (revision 998149) +++ src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java (working copy) @@ -291,15 +291,15 @@ { try { - Mojo mojo = mavenPluginManager.getConfiguredMojo( Mojo.class, - mavenReportExecutorRequest.getMavenSession(), - mojoExecution ); - - if ( !isMavenReport( mojoExecution, pluginDescriptor, mojo ) ) + if ( !isMavenReport( mojoExecution, pluginDescriptor ) ) { return null; } + Mojo mojo = mavenPluginManager.getConfiguredMojo( Mojo.class, + mavenReportExecutorRequest.getMavenSession(), + mojoExecution ); + return (MavenReport) mojo; } catch ( ClassCastException e ) @@ -328,15 +328,25 @@ } } - private boolean isMavenReport( MojoExecution mojoExecution, PluginDescriptor pluginDescriptor, Mojo mojo ) + private boolean isMavenReport( MojoExecution mojoExecution, PluginDescriptor pluginDescriptor ) { - ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); + Class<?> mojoClass; + try + { + mojoClass = + pluginDescriptor.getClassRealm().loadClass( mojoExecution.getMojoDescriptor().getImplementation() ); + } + catch ( ClassNotFoundException e ) + { + // TODO needs to decide what to do here, throws another error? silent ignore? + mojoClass = null; + } + try { MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( mojoExecution.getGoal() ); - Thread.currentThread().setContextClassLoader( mojoDescriptor.getRealm() ); - boolean isMavenReport = MavenReport.class.isAssignableFrom( mojo.getClass() ); + boolean isMavenReport = MavenReport.class.isAssignableFrom( mojoClass ); if ( getLog().isDebugEnabled() ) { @@ -360,10 +370,6 @@ e ); return false; } - finally - { - Thread.currentThread().setContextClassLoader( originalClassLoader ); - } } private Xpp3Dom convert( MojoDescriptor mojoDescriptor ) {code} was (Author: velo): I came up with a quick dirty patch, not sure if that is the best way to deal with the problem but it did solve my problems here. {code} Index: src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java =================================================================== --- src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java (revision 998149) +++ src/main/java/org/apache/maven/plugins/site/DefaultMavenReportExecutor.java (working copy) @@ -48,8 +48,10 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.MavenReport; import org.codehaus.classworlds.ClassRealm; +import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.annotations.Component; import org.codehaus.plexus.component.annotations.Requirement; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.configuration.PlexusConfiguration; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.util.StringUtils; @@ -103,6 +105,9 @@ implements MavenReportExecutor { @Requirement + private PlexusContainer container; + + @Requirement private Logger logger; @Requirement @@ -291,6 +296,37 @@ { try { + Mojo unconfiguredMojo; + + org.codehaus.plexus.classworlds.realm.ClassRealm pluginRealm = pluginDescriptor.getClassRealm(); + org.codehaus.plexus.classworlds.realm.ClassRealm oldLookupRealm = container.setLookupRealm( pluginRealm ); + + ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); + + try + { + container.setLookupRealm( pluginRealm ); + Thread.currentThread().setContextClassLoader( pluginRealm ); + unconfiguredMojo = container.lookup( Mojo.class, mojoExecution.getMojoDescriptor().getRoleHint() ); + } + catch ( ComponentLookupException e ) + { + throw new PluginContainerException( mojoExecution.getMojoDescriptor(), pluginRealm, + "Unable to load the mojo '" + + mojoExecution.getMojoDescriptor().getGoal() + + "' (or one of its required components) from the plugin '" + + pluginDescriptor.getId() + "'", e ); + } + finally + { + container.setLookupRealm( oldLookupRealm ); + Thread.currentThread().setContextClassLoader( oldClassLoader ); + } + + if(!MavenReport.class.isAssignableFrom( unconfiguredMojo.getClass() )) { + return null; + } + Mojo mojo = mavenPluginManager.getConfiguredMojo( Mojo.class, mavenReportExecutorRequest.getMavenSession(), mojoExecution ); {code} > Maven site fails to run due to non-report goals > ----------------------------------------------- > > Key: MSITE-504 > URL: http://jira.codehaus.org/browse/MSITE-504 > Project: Maven 2.x Site Plugin > Issue Type: Bug > Affects Versions: 3.0-beta-2 > Reporter: Marvin Froeder > Assignee: Olivier Lamy > > An user just reported me a curious bug when using flexmojos and maven 3.... > {quote} > [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-site-plugin:3.0-beta-2:site (default-cli) on > project calculator-api: failed to get Reports: The parameters 'filesToTrust' > for goal org.sonatype.flexmojos:flexmojos-maven-plugin:4.0-SNAPSHOT:trust are > missing or invalid -> [Help 1] > org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute > goal org.apache.maven.plugins:maven-site-plugin:3.0-beta-2:site (default-cli) > on project calculator-api: failed to get Reports > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:88) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:80) > at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:87) > at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) > at > org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) > at > org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) > at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:315) > at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152) > at org.apache.maven.cli.MavenCli.execute(MavenCli.java:445) > at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:168) > at org.apache.maven.cli.MavenCli.main(MavenCli.java:132) > at > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) > at > org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) > at > org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) > at > org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) > Caused by: org.apache.maven.plugin.MojoExecutionException: failed to get > Reports > at > org.apache.maven.plugins.site.DefaultMavenReportExecutor.buildMavenReports(DefaultMavenReportExecutor.java:264) > at > org.apache.maven.plugins.site.AbstractSiteRenderingMojo.getReports(AbstractSiteRenderingMojo.java:208) > at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:105) > at > org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107) > at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) > ... 19 more > Caused by: org.apache.maven.plugin.PluginParameterException: The parameters > 'filesToTrust' for goal > org.sonatype.flexmojos:flexmojos-maven-plugin:4.0-SNAPSHOT:trust are missing > or invalid > at > org.apache.maven.plugin.internal.DefaultMavenPluginManager.populatePluginFields(DefaultMavenPluginManager.java:514) > at > org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:467) > at > org.apache.maven.plugins.site.DefaultMavenReportExecutor.getConfiguredMavenReport(DefaultMavenReportExecutor.java:294) > at > org.apache.maven.plugins.site.DefaultMavenReportExecutor.buildMavenReports(DefaultMavenReportExecutor.java:234) > ... 23 more > {quote} > This goal 'trust' is NOT a Maven report and this user never invokes it, but > seems maven-site creeps out with this goal, seems maven is trying to > configure it and fail because 'filesToTrust' is required but not configured. > Since the goal is neither used nor a maven-report it shouldn't affect > maven-site at all. > I will create an IT for this in a few minutes -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira