Łukasz Pieróg created GROOVY-10391:
--------------------------------------
Summary: Default interface methods causing problems with java 17
and groovy 3.0.9
Key: GROOVY-10391
URL: https://issues.apache.org/jira/browse/GROOVY-10391
Project: Groovy
Issue Type: Bug
Components: groovy-runtime
Affects Versions: 3.0.9
Environment: jdk 17.0.1 corretto
gradle 7.3
groovy 3.0.9
Reporter: Łukasz Pieróg
Fix For: 4.0.0-beta-2
I'm trying to migrate a project to build on JDK17 and in that project we use
groovy and spock for testing. It seems that groovy 3.* has a problem with
reflection access to JDK especially visible when using closures
A simple test class:
{code:java}
static void main(String[] args) {
def predicate = {true} as java.util.function.Predicate
predicate.negate()
println "i don't work!! :("
} {code}
Produces
{noformat}
java.lang.IllegalAccessException: module jdk.proxy1 does not open jdk.proxy1 to
unnamed module @43517800{noformat}
In line
{code:java}
predicate.negate() {code}
.negate() being a default method in a Predicate interface which a part of the
jdk
The following however works:
{code:java}
static void main(String[] args) {
def predicate = new Predicate() {
@Override
boolean test(Object o) {
true
}
}
predicate.negate()
println "i work!! :)"
} {code}
I'm using JDK 17.0.1 Corretto for my tests and the example minimal project can
be found here:
[https://github.com/lukaszpierog/jdk17-groovy3]
The above code works with groovy 4.0.0-beta-2. Spock does not support groovy 4
at this moment, so upgrading groovy to 4 isn't an option for me and it seems to
only be a beta release at the moment.
I've tried adding jvm args
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED
however that does not seem to affect the output
Please advise
--
This message was sent by Atlassian Jira
(v8.20.1#820001)