【问题标题】:Groovy - WARNING: An illegal reflective access operation has occurredGroovy - 警告:发生了非法反射访问操作
【发布时间】:2017-12-22 04:15:38
【问题描述】:

我对 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)

任何帮助解决这个问题。

【问题讨论】:

  • 这不是错误,而是警告。不会伤害你。
  • 它在没有任何问题的情况下工作吗?有没有办法解决这个问题?
  • 它会在未来某个点引起问题,但现在还没有。如消息所述,您可以将此报告给库维护人员...如果您使用的是最新版本,并且不存在错误报告。
  • Groovy 必须进行重大更改以适应 Java 9 模块系统;这就是版本标记为alpha-1 的原因。如果您不熟悉 Groovy 和 Java,请从 Groovy 2.4(可能还有 Java 8)开始熟悉,然后再处理模块。
  • 我希望它现在可以被忽略,因为它是警告也不是错误。请查看上游错误报告:issues.apache.org/jira/browse/GROOVY-8339

标签: java groovy


【解决方案1】:

要禁用警告,您可以将 --add-opens 传递给 JVM,请参阅详细信息 here。不幸的是,Groovy 需要打开 很多 模块/包,请参阅此(当前已恢复)commit (source)。刚刚使用 AdoptOpenJDK 11 测试了这些。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      虽然我的环境是 Linux,但在为在 Grails 环境上设置 Groovy 苦苦挣扎了几天之后,我觉得我知道答案了:现在使用 JDK 8。我在摆弄 JDK 9,我认为它太落后了,所以我尝试了 JDK 11,这让事情变得更糟,我遇到了实际的崩溃。看起来 Groovy / Grails 在 Java 版本兼容性方面严重落后。

      一旦新的 Groovy 发布(据说是今年年底),那么也可以使用更新的 JDK。

      【讨论】:

        【解决方案4】:

        使用Java 8,但是如果java版本必须是9或>,你也需要更新groovy版本。

        我运行的是 groovy 2.2.1,它只在 java 版本 8 之前有效

        【讨论】:

          【解决方案5】:

          将 groovy-version 添加到您的 pom:

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

          【讨论】:

          • 这个误导性的提示怎么得了两分?是的,如果 (a) 使用 Maven 并且 (b) groovy 的版本被间接指定为 ${groovy.version},它可能会起作用。
          • 顺便说一句,我正在使用 groovy-3.0.7.jar 和 java 11 (graal vm),但问题仍然存在。
          • 我将 jdk8 与 maven 一起使用,我的 groovy 版本未指定,但将其添加到我的 pom.xml 为我解决了这个问题:org.codehaus.groovygroovy3.0.8
          【解决方案6】:

          JAVA_HOME 设置为版本 8 JRE 为我解决了这个问题:

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

          【讨论】:

            【解决方案7】:

            就我而言,这是因为我在 groovy 中使用了 JUNIT 5,但我发现的最新支持是 JUNIT 4.13

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2022-01-22
              • 1970-01-01
              • 2020-03-09
              • 1970-01-01
              • 1970-01-01
              • 2018-08-24
              • 2018-02-24
              • 2021-08-29
              相关资源
              最近更新 更多