[
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