[
http://jira.codehaus.org/browse/MNG-3012?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
John Casey closed MNG-3012.
---------------------------
Resolution: Fixed
added importFrom(..) to new plugin realms, to bring in Xpp3Dom from the version
of plexus-utils used by maven itself. This should prevent ClassCastExceptions
in the plugins when they call plugin.getConfiguration().
I've verified this in the maven-eclipse-plugin by reverting mine and Kenney's
changes to IdeUtils, and re-running.
> ClassCastException due to plexus-utils NOT being filtered during plugin
> loading
> -------------------------------------------------------------------------------
>
> Key: MNG-3012
> URL: http://jira.codehaus.org/browse/MNG-3012
> Project: Maven 2
> Issue Type: Bug
> Components: Plugins and Lifecycle
> Affects Versions: 2.1-alpha-1
> Reporter: John Casey
> Assignee: John Casey
> Priority: Blocker
>
> The eclipse:eclipse mojo was a perfect example of this. It needs to read the
> plugin configurations from the POM to look for things like
> maven-compiler-plugin's source/target values, so it can setup the .classpath
> appropriately.
> When the IdeUtils (line 345) calls execution.getConfiguration(), it assumes
> the result will be an Xpp3Dom instance, and tries to cast it accordingly.
> Because Maven now has its own "shaded" or internal copy of plexus-utils that
> it doesn't share, the eclipse plugin loads the Xpp3Dom class from a different
> classloader, and the result is a ClassCastException. Admittedly, exposing
> plugin.getConfiguration() as a java.lang.Object doesn't help plugin
> developers very much, and that they need to "just know" that it's of type
> Xpp3Dom (and cast accordingly) has gotten us into some trouble here.
> It's important to note that all plugins that deal directly with
> plugin.getConfiguration() or execution.getConfiguration() will have a problem
> here, meaning older versions of the eclipse plugin (including all released
> versions) and many others will immediately suffer if we leave this as-is.
> Ideally, plugin.getConfiguration() should just return some object (okay,
> maybe it's a java.lang.Object, but that's *not* an elegant solution) that
> contains structured arbitrary data...so, perhaps a good solution would be to
> make the assumption that the object's toString() method will render it into
> XML. Working from an assumption like that, one could do the following:
> String str = String.valueOf( plugin.getConfiguration() );
> Xpp3DomBuilder.build( new StringReader( str ) );
> and proceed as if the plugin.getConfiguration() method had returned a type
> Xpp3Dom, even if we later change it to return something from javax.xml
> (thinking DOM). This is a more resilient approach than simply casting to
> Xpp3Dom, and it's the one I've implemented for the eclipse plugin in revId
> 541953. This is a problem in the current trunk, and any solution will likely
> take some design time to fix, so I don't want this plugin to become
> non-functional for developers working with trunk in the meantime (like anyone
> using m2eclipse).
--
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