[ https://issues.apache.org/jira/browse/GROOVY-7587?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14985171#comment-14985171 ]
Uwe Schindler commented on GROOVY-7587: --------------------------------------- Hi, many thanks. Looks like the ideal workaround to fix this for now. > Groovy 2.2 and 2.4 all fail to execute almost any script with Java 9 JIGSAW > preview builds > ------------------------------------------------------------------------------------------ > > Key: GROOVY-7587 > URL: https://issues.apache.org/jira/browse/GROOVY-7587 > Project: Groovy > Issue Type: Bug > Components: groovy-runtime > Affects Versions: 2.2.2, 2.4.4 > Environment: java version "1.9.0-ea" > Java(TM) SE Runtime Environment (build > 1.9.0-ea-jigsaw-nightly-h3337-20150908-b80) > Java HotSpot(TM) 64-Bit Server VM (build > 1.9.0-ea-jigsaw-nightly-h3337-20150908-b80, mixed mode) > Reporter: Uwe Schindler > Assignee: Jochen Theodorou > Priority: Critical > Labels: Java9 > Fix For: 2.4.6, 2.5.0-beta-1 > > > The Lucene project successfully made their code running with the recently > announced preview builds of Java 9. Unfortunately some parts of Lucene's > build script and also the build of the Policeman's ForbiddenAPI checker > (https://github.com/policeman-tools/forbidden-apis/) use groovy to execute > some stuff that does not work with plain Ant. Similar issues are seen by > Elasticsearch's scripting support plugin. > Unfortunately even simple scripts fail quite often. The issue always looks > like this: > {code:java} > def temp = ClassLoader.getSystemClassLoader() > temp.toString() > {code} > {noformat} > java.lang.reflect.InaccessibleObjectException: Unable to make member of class > jdk.internal.misc.ClassLoaders$AppClassLoader accessible: module java.base > does not export jdk.internal.misc to <unnamed module @1a6f5124> > at > sun.reflect.Reflection.throwInaccessibleObjectException(java.base@9.0/Reflection.java:462) > at > java.lang.reflect.AccessibleObject.checkCanSetAccessible(java.base@9.0/AccessibleObject.java:194) > at > java.lang.reflect.AccessibleObject.setAccessible(java.base@9.0/AccessibleObject.java:157) > at > org.codehaus.groovy.reflection.CachedConstructor$1.run(CachedConstructor.java:44) > at java.security.AccessController.doPrivileged(java.base@9.0/Native > Method) > at > org.codehaus.groovy.reflection.CachedConstructor.<init>(CachedConstructor.java:42) > at > org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:79) > at > org.codehaus.groovy.reflection.CachedClass$2.initValue(CachedClass.java:69) > at > org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49) > at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36) > at > org.codehaus.groovy.reflection.CachedClass.getConstructors(CachedClass.java:268) > at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:218) > at groovy.lang.MetaClassImpl.<init>(MetaClassImpl.java:228) > at > groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createNormalMetaClass(MetaClassRegistry.java:171) > at > groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:161) > at > groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:144) > at > org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:253) > at > org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285) > at > org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:295) > at > org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261) > at > org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:871) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166) > at > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) > at > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) > at generate-deprecated.run(generate-deprecated.groovy:20) > at org.codehaus.groovy.ant.Groovy.parseAndRunScript(Groovy.java:501) > at org.codehaus.groovy.ant.Groovy.execGroovy(Groovy.java:448) > at org.codehaus.groovy.ant.Groovy.execute(Groovy.java:313) > {noformat} > This always happens under the following circumstances. You have a public > Object accessible from everywhere in the JDK. This object is working like a > factory and creates an implementation of an abstract class. In the above > example this is a classloader (abstract class). This returned instance is of > course some JDK-internal class and the user code is intended to only call the > visible methods on it. > Unfortunately groovy tries in the second line to create a metaclass to get > "full insight" of this internal class. For that it tries to make everything > accessible. And with Java 9 including JIGSAW this is no longer possible. You > can use the APIs provided by the internal implementation, but you are not > allowed to do any non-public stuff. This is disallowed by the Java module > system and there is no way around (unless you disable the module system > completely, which will not work in all cases in Java 9 once it is released). -- This message was sent by Atlassian JIRA (v6.3.4#6332)