Home > Back-end >  groovy WARNING: An illegal reflective access operation has occurred under Ubuntu
groovy WARNING: An illegal reflective access operation has occurred under Ubuntu

Time:12-21

Same issue as Groovy - WARNING: An illegal reflective access operation has occurred, just that

  • This is in Ubuntu 21.10
  • And most importantly that solution (of passing --add-opens to the JVM), I'm not able to make it working for me.
$ groovy -version
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/usr/share/groovy/lib/groovy-2.4.21.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Groovy Version: 2.4.21 JVM: 11.0.12 Vendor: Ubuntu OS: Linux

$ java -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12 7-Ubuntu-0ubuntu3)
OpenJDK 64-Bit Server VM (build 11.0.12 7-Ubuntu-0ubuntu3, mixed mode, sharing)

$ java --add-opens java.base/java.lang=ALL-UNNAMED -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12 7-Ubuntu-0ubuntu3)
OpenJDK 64-Bit Server VM (build 11.0.12 7-Ubuntu-0ubuntu3, mixed mode, sharing)

$ groovy --add-opens java.base/java.lang=ALL-UNNAMED -version
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/usr/share/groovy/lib/groovy-2.4.21.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Caught: java.io.FileNotFoundException: /export/home/me/--add-opens (/export/home/me/--add-opens)
java.io.FileNotFoundException: /export/home/me/--add-opens (/export/home/me/--add-opens)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 21.10
Release:        21.10
Codename:       impish

Update, I've tried to set JAVA_OPTS as well:

export JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"

$ groovy -version
Unrecognized option: --add-opens
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

How to get rid of that warning message?

CodePudding user response:

It's clear from the FileNotFound exception that the --add-opens was not used as a JVM flag. Have you tried setting JAVA_OPTS? Like so:

export JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
groovy --version

I don't get the same error as you. I actually still get the reflective access warnings, not an error about --add-opens being unrecognized. Even with --illegal-access=permit I still see the warnings. Odd. I'm sure the JAVA_OPTS value is being used as it does complain if I set it to an invalid flag.

Do you have JAVA_HOME defined? I noticed groovy also picks up that value to choose the JVM.

With Java 17 I get no warnings or errors.

CodePudding user response:

It is more than a 'warning' for me: I cannot get Groovy scripts to run (on macOS) with the current JVM 9, much less 10.

The workaround (until a compatible version of Groovy is available) is to install jenv and an earlier version of Java, so you can switch when needed.

  • Related