いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。

Java9 + Kotlin 1.2.21 で出る謎の警告メッセージ (java9, kotlin 1.2, kotlinc, An illegal reflective access operation has occurred)

概要

なんか、Java 9 と Kotlin 1.2 だと、謎の警告メッセージが出てきて焦ったので、メモメモ。

私の環境の java は以下のようになってます。

$ java -version
java version "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)

kotlin 自体は、IntelliJ IDEA のプラグインで入れてます。

kotlincってどこにあるんじゃーって探してたら以下の場所にありました。

$HOME\.IntelliJIdea2017.3\config\plugins\Kotlin\kotlinc\bin\kotlinc

で、kotlin のバージョンは

$ $HOME\.IntelliJIdea2017.3\config\plugins\Kotlin\kotlinc\bin\kotlin -version
Kotlin version 1.2.21-release-88 (JRE 9.0.1+11)

たぶん、現時点での最新じゃないかなと。

変な警告でる

で、以下のようなドウデモイイサンプルをコンパイルして実行します。

fun main(args: Array<String>) {
    var i = 100
    val ii = 100

    println("hello world - $i - $ii")
}

これを、IntelliJ IDEA から実行すると、普通に実行されます。

でも、kotlinc 直接つかってコンパイルすると

$ $HOME\.IntelliJIdea2017.3\config\plugins\Kotlin\kotlinc\bin\kotlinc helloworld.kt
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.intellij.util.text.StringFactory to constructor java.lang.String(char[],boolean)
WARNING: Please consider reporting this to the maintainers of com.intellij.util.text.StringFactory
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

なんか出てきた。

コンパイル自体は普通に完了していて、普通に実行できます。

$ $HOME\.IntelliJIdea2017.3\config\plugins\Kotlin\kotlinc\bin\kotlin HelloworldKt
hello world

バグ?

ネットでいろいろ情報さがしてみると、以下にヒット。

discuss.kotlinlang.org

ここに以下の書き込みが

discuss.kotlinlang.org

java 9 + kotlin で出る既知の問題とのこと。

リンク先に行ってみると

https://youtrack.jetbrains.com/issue/KT-19051

バグ登録されていて、すでに fix 済みになっていました。

Target versions が 1.2.30 なので、私の環境の 1.2.21 では再現するってことかな。

まあ、とりあえずIDE上は出ないし、キニスンナって事にします。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。