Gradle not working on Jigsaw
Kevin Rushforth
kevin.rushforth at oracle.com
Thu Oct 20 12:42:36 UTC 2016
We use gradle for building JavaFX, so I did some testing earlier in the
week and found similar issues. I had tried adding
"--add-exports-private=java.base/java.lang=ALL-UNNAMED" to JAVA_OPTIONS,
but hadn't run into
"--add-exports-private=java.base/java.util=ALL-UNNAMED" yet (it died
before it did anything that hit this).
One thing we are looking at doing as a workaround is to launch gradle
with a pre-Jigsaw enabled JDK (e.g., JDK 8u112 or JDK 9 build 109) and
fork/exec javac, java, javadoc, etc., with the latest jigsaw EA. Our
build is already set up for this (mostly...we found that a few bugs have
crept in where we use the java on the path and/or specified by JAVA_HOME
instead ot the separate "build JDK", but we're working through those). I
suspect this will work for most things, but likely not for running unit
tests.
-- Kevin
Alan Bateman wrote:
> On 20/10/2016 08:25, Cédric Champeau wrote:
>
>> Yes, Gradle, Groovy and other third party libraries Gradle uses are
>> broken since the changes to enforce strong encapsulation at runtime
>> (preventing calls to setAccessible). I already raised the concern
>> here, saying we have no clear idea of the impact of such a change at
>> a larger scale, but it totally broke our efforts, and that's kind of
>> depressing. We'll figure it out, I hope, but unfortunately we have no
>> bandwidth to do it now. We're gladly accepting pull requests, though :)
>>
> We are in no doubt that changing setAccessible will expose a lot of
> issues with existing code that uses it to get at non-public
> types/members in JDK classes (the rubygrapefruit library that Gradle
> uses is a good example as it seems to use setAccessible to get at the
> underlying collection of an unmodifable collection so that it can
> modify it).
>
> In the original proposal (2015) then this method was changed so that
> it cannot be used to directly break into non-exported packages (you
> can't use it to get a private types of public types in sun.awt for
> example). That was an attempt to strike a balance and avoid too much
> disruption but it leaves the hole that is #AwkwardStrongEncapsulation.
> The latest proposal in the JSR is an attempt to address that issue but
> it does impact code that uses setAccessible to get at non-public
> types/members in java.* classes. I assume this is what Stephen is
> running into with his mail but I can't say for sure without seeing the
> exception.
>
> Is the Gradle forum the best place to follow-up on these issues? (I
> can't tell from Stephen's mail if it's Gradle or Groovy here).
>
> -Alan
More information about the jigsaw-dev
mailing list