On 18.09.2016 15:03, Remi Forax wrote:
------------------------------------------------------------------------
*De: *"Cédric Champeau" <[email protected]>
*À: *[email protected]
*Envoyé: *Dimanche 18 Septembre 2016 14:39:30
*Objet: *Re: TeamCity back on track
I can confirm this is a new error. Gradle 3.0 works with b119, but
not b136. And from what I can see, this is *not* going to be trivial
to fix. Best I could get now is:
Caused by: java.lang.IllegalAccessException: class
org.gradle.internal.reflect.JavaMethod cannot access a member of
class java.lang.ClassLoader (in module java.base) with modifiers
"protected"
at
java.base/jdk.internal.reflect.Reflection.throwIllegalAccessException(Reflection.java:405)
at
java.base/jdk.internal.reflect.Reflection.throwIllegalAccessException(Reflection.java:396)
at
java.base/jdk.internal.reflect.Reflection.ensureMemberAccess(Reflection.java:98)
at
java.base/java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:359)
at
java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:351)
at java.base/java.lang.reflect.Method.invoke(Method.java:529)
at
org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:77)
Which is f* annoying.
[...]
This one is a new bug/feature,
it's part of what we have called 'stronger' (not strong) encapsulation
i.e. most of the classes of java.* disallow setAccessible, before that
only internal packages were disallowing setAccessible.
so setAccessible is forbidden, but a subclass from a different module
can access the method... strange new rules. Anyway... was there a thread
on jigsaw-dev about this? I would like to reread the proposal
For your specific bug, you can use ClassLoader.getDefinedPackages() or
classloader.getUnamedModule().getPackages() instead.
of course with the disadvantage that these are JDK9 only methods.
bye Jochen