Groovy - 警告: 发生了非法的反射访问操作

47

我对Java和Groovy都比较陌生。我在我的Windows 10笔记本电脑(64位)上安装了Groovy 3.0,但运行Groovy时出现以下警告:

>groovy -v
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/C:/groovy-3.0.0-alpha-1/lib/groovy-3.0.0-alpha-1.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: 3.0.0-alpha-1 JVM: 9.0.1 Vendor: Oracle Corporation OS: Windows 10

Java版本为:

java --version
java 9.0.1
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
任何帮助解决这个问题。

1
这不是一个错误,而是一个警告。不会对你造成伤害。 - shmosel
1
它以后会没有问题吗?有什么方法可以解决这个问题吗? - Here_2_learn
1
它将在未来的某个时候引起问题,但现在还没有。正如消息所说,如果您正在使用最新版本,并且不存在错误报告,您可以向库维护者报告此问题。 - shmosel
8
为适应Java 9模块系统,Groovy正在经历重大变革;这就是为什么该版本标记为“alpha-1”的原因。如果您刚接触Groovy和Java,请从Groovy 2.4(以及可能的Java 8)开始了解,然后再处理模块。 - chrylis -cautiouslyoptimistic-
1
如果你认为某件事情应该痛苦,那么你就不太可能注意到自己是否做错了。——保罗·格雷厄姆。@shmosel:当然,警告并不能直接阻止某些东西的工作,但是忽略警告的习惯是...我会说...“做错了”。除非有人真正需要注意到它们,否则不应该生成警告。然后,如果产生警告,我们应该真正关注。这种不广泛实践的事实确实会以各种方式伤害各种人,有些大的,大多数是小的(比如在这里浪费时间!) - lindes
显示剩余4条评论
8个回答

8

对我来说,这不仅仅是一个“警告”:我无法在当前的JVM 9甚至10(在macOS上)上运行Groovy脚本。解决方法(直到有兼容版本的Groovy可用)是安装jenv和早期版本的Java,以便在需要时切换。


8

要禁用警告,您可以向JVM传递--add-opens参数,请参见此处的详细信息。不幸的是,Groovy需要很多模块/包被打开,参见这个(目前已还原)提交 (来源)。我刚使用AdoptOpenJDK 11测试了这些内容。


5

为我解决了问题,将JAVA_HOME设置为8版本的JRE:

#! /usr/bin/env -S JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre groovy
println "hello world"

4
尽管我的环境是Linux,但经过几天的努力来设置Groovy on Grails环境后,我感觉我知道答案了:现在使用JDK 8。 我试着使用JDK 9,但它的兼容性太差,所以我尝试了JDK 11,结果反而更糟,我遇到了实际崩溃问题。看来,在Java版本兼容性方面,Groovy / Grails严重滞后。一旦新的Groovy发布(预计今年年底),那么也可以使用更新的JDK。

1

使用Java 8,但如果必须使用Java版本9或更高版本,则需要更新Groovy版本。

我正在运行Groovy 2.2.1,它只能在Java版本8之前工作。


1

将groovy-version添加到您的pom文件中:

        <groovy.version>3.0.4</groovy.version>

1
这个误导性的提示怎么会得到两个点?是的,它可能只有在使用Maven并且间接指定groovy版本为${groovy.version}时才能起作用。 - wh81752
1
顺便提一下,我正在使用 groovy-3.0.7.jar 和 java 11 (graal vm),但问题仍然存在。 - wh81752
1
我正在使用带有Maven的JDK8,我的Groovy版本没有明确指定,但将以下内容添加到我的pom.xml文件中解决了我的问题:<dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy</artifactId> <version>3.0.8</version> </dependency> - Peter Petrekanics

0
在我的情况下,这是因为我正在使用JUNIT 5和Groovy,但我找到的最新支持版本是JUNIT 4.13。

0

我在Linux Mint 20.1上使用openjdk 11.0.15 2022-04-19和Groovy 2.4.17时遇到了这个问题。

WARNING: All illegal access operations will be denied in a future release
Groovy Version: 2.4.17 JVM: 11.0.15 Vendor: Private Build OS: Linux

为了修复它,我安装了Jabba https://github.com/shyiko/jabba 首先,您需要设置要安装的Jabba版本:
export JABBA_VERSION=0.11.2

然后运行curl命令:
curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh
Installing v0.11.2...

Adding source string to /home/spock/.bashrc
Adding source string to /home/spock/.profile
Installation completed

spock@hp-compaq-a:~/workspace/test/groovy-examples/hello-world$ jabba
Java Version Manager (https://github.com/shyiko/jabba).

Usage:
  jabba [flags]
  jabba [command]

Available Commands:
  install     Download and install JDK
  uninstall   Uninstall JDK
  link        Resolve or update a link
  unlink      Delete a link
  use         Modify PATH & JAVA_HOME to use specific JDK
  current     Display currently 'use'ed version
  ls          List installed versions
  ls-remote   List remote versions available for install
  deactivate  Undo effects of `jabba` on current shell
  alias       Resolve or update an alias
  unalias     Delete an alias
  which       Display path to installed JDK

spock@hp-compaq-a:~/workspace/test/groovy-examples/hello-world$ jabba ls
zulu@1.8.275

spock@hp-compaq-a:~/workspace/test/groovy-examples/hello-world$ jabba use zulu@1.8.275

spock@hp-compaq-a:~/workspace/test/groovy-examples/hello-world$ jabba current
zulu@1.8.275

spock@hp-compaq-a:~/workspace/test/groovy-examples/hello-world$ groovy -v
Groovy Version: 2.4.17 JVM: 1.8.0_275 Vendor: Azul Systems, Inc. OS: Linux

观看这个视频,了解Jabba可以做什么:

https://www.youtube.com/watch?v=y2kYVCCeIMo


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接