【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
同じエラーだったのでバージョン合わせて無事解決しました!(@静岡のエンジニア
コメントありがとうございます。同郷ですね!
解決に役立ったようで何よりです!