Java10がリリースされましたので、
早速インストールしてみました。
Oradleのページから全然問題なくインストールできます。
バージョン確認
$ java -version
java version "10" 2018-03-20
Java(TM) SE Runtime Environment 18.3 (build 10+46)
$ /usr/libexec/java_home -V
Matching Java Virtual Machines (3):
10, x86_64: "Java SE 10" /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_65, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home
java_home
コマンドで自身のマシンに
どのバージョンのJavaがインストールされているのか確認する事ができます。
JAVA_HOME環境変数を設定していない場合は、
一番上に表示されているJDKのHOMEが使われているかと思います。
Gradleがバージョンを認識しない
古いGradleを使用していると、下記のようにJava10のバージョンを認識してくれません。
(なんとなく動作はするみたいですが)
Could not determine Java version using executable /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin/java.
javaのバージョンが確認できませんでした。
※試したのは、Gradle4.3
現時点で最新のGradle4.6あたりを使用すれば、正常に認識するようです。
Gradleで警告がでる
Java10と9から、Gradle使用時に下記のような警告が発生します。
警告が出るだけで、動作は問題ないようです。
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/Users/tyab/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy-all/2.4.14/cd1a8ce914f5fe86c00a917b0577da6f367edcf9/groovy-all-2.4.14.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
Gradle使用時のこの警告は、Java9以降で発生します。
Gradleというよりは、GroovySDK側で、non-publicメソッドにアクセスしているという事なんでしょうが、
Groovy側では、現在まだ修正されていないようです。
--add-opensオプション
Gradle起動時に警告メッセージが出ているようなので、jvmオプションに以下を追加するとよいみたい。
--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED
JAVA_TOOL_OPTIONS環境変数を使って、gradleを使う例
JAVA_TOOL_OPTIONS="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED" ./gradlew --no-daemon -v
bashrcへの追記
毎回指定するのが面倒なら、bashrcなどに追記しておくとよいが。
Groovy側で動きがあれば解消する問題かと思うので、きっと今だけな気がする。
# .bashrcへ追記
echo '
export JAVA_TOOL_OPTIONS="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED"
' >> ~/.bashrc
# .zshrcへ追記
echo '
export JAVA_TOOL_OPTIONS="--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED"
' >> ~/.zshrc
参考URL
gradle issue
https://github.com/gradle/gradle/issues/2995
groovy apache
https://issues.apache.org/jira/browse/GROOVY-8339
1件のコメント