【ReactNative】GradleとJDKのバージョンの組み合わせでビルドが通らない
はじめに
今回はReactNative
でAndroid
のビルドをかけた時に発生したエラーについて紹介します。
特に、新規にセットアップした端末で既存ソースを動かした場合に発生しやすい内容のため、ハマる方も多いと思います。
何が起きたか
諸々の実行環境を新しくセットアップした端末でAndroid
のビルドを行うとエラーが出るようになりました。
FAILURE: Build failed with an exception.
* What went wrong:
Could not initialize class org.codehaus.groovy.runtime.InvokerHelper
ビルドをかけているソース自体は別端末で正常に動作していることが確認できているため、
当該のエラーは端末環境に起因するものだと推察できます。
調べてみると、どうもGradle
とJDK
のバージョンの組み合わせが原因のようです。
Gradleとは?
Gradle
のWiki
には以下のようにあります。
GradleはApache AntやApache Mavenのコンセプトに基づくオープンソースビルド自動化システムであり、プロジェクト設定の宣言にはApache Mavenが利用するXML形式ではなくGroovyベース、もしくはKotlin Scriptベースのドメイン固有言語 (DSL) を採用している。
要するに、ReactNative
の世界でAndroid
の実行ファイルのビルドを担っているやつです。
原因
同じような内容のIssue
がGradle
のプロジェクトに上がっていました。
上記のIssue
の内容をかいつまんで説明すると・・・
-
Gradle
がJDK 14
では動作しなくなった -
Gradle
のバージョンを6.3
に上げたところ動作するようになった
といったものでした。
ちなみに当該の端末でjava -version
を実行すると、しっかりとJDK 14
の文字が。
※現在Java
の最新が15
なので、未確認ですが同じ事象が発生するかもしれません。
ReactNativeではどこでGradleのバージョンを指定している?
原因はわかってきましたが、そもそもReactNative
ではどこでGradle
のバージョンを指定しているのでしょうか?
答えはandroid/gradle/wrapper/gradle-wrapper.properties
です。
当該ファイルに以下の記載がありました。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
これの3行目を以下のように修正
- distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
これで問題なく動作するようになりました。
まとめ
今回はReactNaitve
でJDK
とGradle
の組み合わせでビルドが行えなくなるエラーについて紹介しました。
端末や実行環境のバージョン依存のエラーはなかなか遭遇する機会もないので、一度ハマるとなかなか抜け出せないことが多いです。
今回は対象が既存ソースだったため最初から実行環境に目をつけて対処することができましたが、そうでない場合はもっと時間がかかったように思えます。
そういった場合にこの記事が役立ちましたら幸いです。
Discussion
同じエラーだったのでバージョン合わせて無事解決しました!(@静岡のエンジニア
コメントありがとうございます。同郷ですね!
解決に役立ったようで何よりです!