Groovy の Illegal reflective access は修正されたのか?

Java9 以降から、Gradleなどを使うと、こういった警告がでるようになっています。

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/tyab/.sdkman/candidates/groovy/current/lib/groovy-2.5.8.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
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

Java10使用時のGradle警告について

過去の記事でも触れましたが、JavaのModuleシステム(Jigsaw)によるもので、Groovyがリフレクションにより本来アクセスできないはずのシグネチャにアクセスしている為で、Moduleシステムに合わせた対応がまだできていないためです。
警告が出るだけで実害はないので、現状無視して問題ありません。

Illegal reflective access 修正されてるの?

上記の記事を書いたのが1年半以上前なんですが、未だに出るのでどうなってんだと思って調べました。

Groovyのissueを見ると、一応もう修正はされているようです。

これが、実際の修正コード
Fixed by:

ただ、
2019年7月あたりで修正されてはいるようですが、
2019年12月現在の最新安定版である2.5.8(Released: 2019-08-03)には含まれず、まだ安定版でのリリースはされていないようです。

修正版いつ出るの?

GROOVY_2_5_Xという開発ブランチには修正がマージされているようなので、これから出るであろうgroovy2.5.9には入りそうです。

あと、Groovy 3.0 RC版ではありますがこちらにも修正が反映されています。

Groovy 3.0.0-rc-2 [Released: 2019-12-05]

ちなみに2.6は、リリース中止になったようですね・・。
3.0 に注力しているということでしょうか

Groovy 2.6.0 [Unreleased: discontinued]

Groovy 2.5.9と、3.0の正式版リリース時期については探したんですが確認できなかったです。
ただ、3、4ヶ月毎にリリースしているのでそろそろ出るんじゃないでしょうか?

Groovy 3.0 で警告が消えるのか?

実際、修正版なら "Illegal reflective access" 警告は出なくなっているんでしょうか?
ちょっと、RC版の3.0を使って警告でなくなっているのかだけ確認しました。

Groovy 2.5.8

修正が入ってないバージョンですから、
やはり使うと警告はでますね。

$ groovy -version
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/Users/tyab/.sdkman/candidates/groovy/current/lib/groovy-2.5.8.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
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.5.8 JVM: 11.0.4 Vendor: AdoptOpenJDK OS: Mac OS X

Groovy 3.0 rc1

RC版ですが修正されているので、
もうIllegal reflective access の警告はでないはずです。

$ groovy -version
Groovy Version: 3.0.0-rc-1 JVM: 11.0.4 Vendor: AdoptOpenJDK OS: Mac OS X

ちゃんと出なくなってますね!

まとめ

Java9 以降で発生する、Groovyの警告
"Illegal reflective access" は、すでに修正されている。

最新(2019年12月時点)、安定版でのリリースはまだされていない。

修正されてるバージョン

  • Groovy 2.5.9 ... リリースいつかわからないけどもうすぐ出そう。
  • Groovy 3.0 ... RC版だけともうすぐ正式版もリリースされるはず。

Gradleは内部でGroovyを使うので、
Gradleのタスクを実行すると同じく警告がでる。

最新(2019年12月時点)Gradle 6.0.1に使われているGroovyはまだ2.5.8なので、
Gradle使ってる方は、まだしばらくは警告が出てしまう状況に変わりはないようです。

1件のコメント

コメントを残す