You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Stuart McCulloch (JIRA)" <ji...@codehaus.org> on 2013/07/31 06:51:53 UTC

[jira] (MNG-5042) Regression: CloningClassLoader causes StackOverflowError in groovy

    [ https://jira.codehaus.org/browse/MNG-5042?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=329836#comment-329836 ] 

Stuart McCulloch commented on MNG-5042:
---------------------------------------

Just to close the loop; the fix is available in Maven 3.0.4, 3.0.5, and 3.1.0
                
> Regression: CloningClassLoader causes StackOverflowError in groovy
> ------------------------------------------------------------------
>
>                 Key: MNG-5042
>                 URL: https://jira.codehaus.org/browse/MNG-5042
>             Project: Maven 2 & 3
>          Issue Type: Bug
>          Components: Class Loading
>    Affects Versions: 3.0, 3.0.1, 3.0.2, 3.0.3
>            Reporter: Patrick Staton
>         Attachments: test-plug.zip
>
>
> I am unable to use a groovy class as a plexus component in maven 3 because groovy's metaclass mechanism calls Introspector.getBeanInfo() in constructors which in turn calls classloader.loadClass(beanClass.getName() + BEANINFO_SUFFIX) (the class name is "FooBar$__plexus2") which in turn causes CloningClassLoader to create a new clone of the class named "FooBar$__plexus2BeanInfo". When "FooBar$__plexusBeanInfo" is instantiated groovy's the meta class mechanism again calls 
> Introspector.getBeanInfo() on "FooBar$__plexus2".
> Example stack trace:
> {code}at sis.buildtools.SisMapVersionsPhase.$getStaticMetaClass(VersionsMojo.groovy)
>         at sis.buildtools.SisMapVersionsPhase.<init>(VersionsMojo.groovy:692)
>         at sis.buildtools.SisMapVersionsPhase$__plexus2BeanInfo.<init>(Unknown Source)
>         at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
>         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>         at java.lang.Class.newInstance0(Class.java:355)
>         at java.lang.Class.newInstance(Class.java:308)
>         at java.beans.Introspector.instantiate(Introspector.java:1449)
>         at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:431)
>         at java.beans.Introspector.<init>(Introspector.java:380)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:167)
>         at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:2940)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2938)
>         at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2921)
>         at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
>         at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
>         at sis.buildtools.SisMapVersionsPhase.$getStaticMetaClass(VersionsMojo.groovy)
>         at sis.buildtools.SisMapVersionsPhase.<init>(VersionsMojo.groovy:692)
>         at sis.buildtools.SisMapVersionsPhase$__plexus2BeanInfo.<init>(Unknown Source)
>         at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
>         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>         at java.lang.Class.newInstance0(Class.java:355)
>         at java.lang.Class.newInstance(Class.java:308)
>         at java.beans.Introspector.instantiate(Introspector.java:1449)
>         at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:431)
>         at java.beans.Introspector.<init>(Introspector.java:380)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:167)
>         at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:2940)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2938)
>         at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2921)
>         at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
>         at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
>         at sis.buildtools.SisMapVersionsPhase.$getStaticMetaClass(VersionsMojo.groovy)
>         at sis.buildtools.SisMapVersionsPhase.<init>(VersionsMojo.groovy:692)
>         at sis.buildtools.SisMapVersionsPhase$__plexus2BeanInfo.<init>(Unknown Source)
>         at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
>         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>         at java.lang.Class.newInstance0(Class.java:355)
>         at java.lang.Class.newInstance(Class.java:308)
>         at java.beans.Introspector.instantiate(Introspector.java:1449)
>         at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:431)
>         at java.beans.Introspector.<init>(Introspector.java:380)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:167)
>         at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:2940)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2938)
>         at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2921)
>         at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
>         at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
>         at sis.buildtools.SisMapVersionsPhase.$getStaticMetaClass(VersionsMojo.groovy)
>         at sis.buildtools.SisMapVersionsPhase.<init>(VersionsMojo.groovy:692)
>         at sis.buildtools.SisMapVersionsPhase$__plexus2BeanInfo.<init>(Unknown Source)
>         at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source){code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira