Android Studioでプロジェクトを開いたときやGradle Sync、ビルド、
TerminalからGradleを実行したときに、
「JAVA_HOME is not set」
というエラーが表示されることがあります。
このエラーは、
Javaの場所を示す環境変数
JAVA_HOME
が設定されていない場合や、
正しいJDKの場所を指していない場合に発生します。
特にJDKを新しくインストールした場合、
Javaのバージョンを変更した場合、
TerminalからGradleを実行した場合、
またはPCを変更した場合などに発生することがあります。
この記事では、
Android Studioで「JAVA_HOME is not set」と表示される主な原因と解決方法を解説します。
- 「JAVA_HOME is not set」とは
- 主な原因
- Javaがインストールされているか確認する
- JDKがインストールされているか確認する
- JAVA_HOMEの現在の設定を確認する
- JAVA_HOMEに設定されているパスを確認する
- JDKの場所を確認する
- macOSでJDKの場所を確認する
- macOSでJAVA_HOMEを一時的に設定する
- macOSでJAVA_HOMEを継続的に設定する
- 特定のJavaバージョンを指定する場合
- WindowsでJAVA_HOMEを設定する
- PATHも確認する
- JAVA_HOMEとPATHの違いを確認する
- Android StudioのGradle JDKを確認する
- Gradleが使用しているJavaを確認する
- 複数のJDKがインストールされている場合
- JDKを更新した後に発生した場合
- Android Studioを更新した後に発生した場合
- 古いプロジェクトを開いた場合
- JDKのバージョンが合っているか確認する
- 「Android Gradle plugin requires Java」も表示される場合
- 「Unsupported class file major version」も表示される場合
- 環境変数を変更した後はTerminalを再起動する
- Android Studioを再起動する
- Gradle Syncを再実行する
- コマンドラインだけでエラーになる場合
- CIや自動ビルド環境で発生する場合
- エラー別の確認ポイント
- 解決しない場合の確認手順
- まとめ
「JAVA_HOME is not set」とは
「JAVA_HOME is not set」は、
Javaを使用するプログラムが
JDKのインストール場所を確認できない場合に表示されるエラーです。
JAVA_HOME
は、
使用するJDKの場所を示す環境変数です。
Gradleやその他のJavaを使用するツールでは、
JAVA_HOME
を参照してJavaの実行環境を確認する場合があります。
JAVA_HOME is not set and no 'java' command could be found in your PATH.
このようなエラーが表示された場合は、
JAVA_HOME
または
PATH
のJava設定を確認します。
ポイント:
Android Studioからは正常に動作していても、
TerminalからGradleを実行した場合だけ
「JAVA_HOME is not set」が表示されることがあります。
Android StudioのGradle JDKと、
OS側の環境変数は別に確認する必要があります。
主な原因
「JAVA_HOME is not set」が発生する主な原因には、
次のようなものがあります。
JAVA_HOMEが設定されていないJAVA_HOMEに間違ったパスが設定されている- JDKではなくJREの場所を指定している
- JDKがインストールされていない
- JDKを削除した後も古いパスが残っている
- Javaを更新した後も以前のJDKのパスが設定されている
- 複数のJDKがインストールされている
PATHにJavaが設定されていない- 環境変数を変更した後にTerminalを再起動していない
- Android StudioとTerminalで異なるJava環境を使用している
- CIや自動ビルド環境で
JAVA_HOMEが設定されていない
Javaがインストールされているか確認する
まず、
Javaが使用できる状態になっているか確認します。
Terminalやコマンドプロンプトで、
次のコマンドを実行します。
java -version
Javaのバージョン情報が表示されれば、
Java自体は認識されています。
コマンドが見つからない場合は、
JDKがインストールされていないか、
PATH
が正しく設定されていない可能性があります。
JDKがインストールされているか確認する
Androidアプリの開発では、
Javaを実行するだけではなく、
JDKを使用します。
PCにJavaが存在していても、
必要なJDKがインストールされていない場合があります。
Android Gradle PluginやGradleが要求するJavaバージョンに対応した
JDKがインストールされているか確認します。
JAVA_HOMEの現在の設定を確認する
JAVA_HOME
が設定されているか確認します。
macOSやLinuxでは、
Terminalで次のように確認できます。
echo $JAVA_HOME
Windowsのコマンドプロンプトでは、
次のように確認できます。
echo %JAVA_HOME%
何も表示されない場合は、
JAVA_HOME
が設定されていない可能性があります。
JAVA_HOMEに設定されているパスを確認する
JAVA_HOME
に値が設定されていても、
そのパスが正しいとは限りません。
JDKを削除したり、
Javaのバージョンを変更したりすると、
存在しない古いJDKのパスが残る場合があります。
表示されたパスに
実際にJDKが存在しているか確認します。
JDKの場所を確認する
JAVA_HOME
には、
Java実行ファイルそのものではなく、
JDKのルートディレクトリを指定します。
例えば、
java
実行ファイルが次の場所にある場合でも、
/path/to/jdk/bin/java
JAVA_HOME
には通常、
次のようにJDK本体の場所を指定します。
/path/to/jdk
macOSでJDKの場所を確認する
macOSでは、
インストールされているJDKを確認するために
次のコマンドを使用できます。
/usr/libexec/java_home -V
使用するJavaの場所を確認する場合は、
次のコマンドも利用できます。
/usr/libexec/java_home
表示されたJDKの場所を、
JAVA_HOME
に設定できます。
macOSでJAVA_HOMEを一時的に設定する
macOSやLinuxでは、
Terminal上で一時的に
JAVA_HOME
を設定できます。
export JAVA_HOME=$(/usr/libexec/java_home)
この設定は、
現在のTerminalセッションで有効になります。
Terminalを閉じると設定が失われる場合があるため、
継続して使用する場合はシェルの設定ファイルに記述します。
macOSでJAVA_HOMEを継続的に設定する
macOSでzshを使用している場合は、
~/.zshrc
などに
JAVA_HOME
の設定を追加できます。
export JAVA_HOME=$(/usr/libexec/java_home)
設定後は、
Terminalを再起動するか、
設定ファイルを再読み込みします。
source ~/.zshrc
その後、
echo $JAVA_HOME
で設定が反映されているか確認します。
特定のJavaバージョンを指定する場合
複数のJDKがインストールされている場合は、
使用するJavaのバージョンを指定できます。
例えば、
macOSでJava 17を使用する場合は、
次のように指定できます。
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
Java 21を使用する場合は、
次のように指定できます。
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
使用しているAndroid Gradle PluginやGradleに対応した
Javaバージョンを指定します。
WindowsでJAVA_HOMEを設定する
Windowsでは、
システムの環境変数から
JAVA_HOME
を設定できます。
環境変数に
JAVA_HOME
を作成し、
インストールされているJDKのフォルダを指定します。
C:\Program Files\Java\jdk-17
実際のパスは、
インストールされているJDKによって異なります。
設定後は、
コマンドプロンプトやTerminalを一度閉じてから開き直します。
PATHも確認する
エラーメッセージによっては、
JAVA_HOME
だけでなく
PATH
にJavaが存在しないことも示される場合があります。
PATH
には、
JDKの
bin
ディレクトリを追加する場合があります。
$JAVA_HOME/bin
Windowsでは、
次のような形式で設定する場合があります。
%JAVA_HOME%\bin
JAVA_HOMEとPATHの違いを確認する
JAVA_HOME
と
PATH
は役割が異なります。
| 設定 | 主な役割 |
|---|---|
JAVA_HOME |
使用するJDKの場所を示す |
PATH |
javaなどのコマンドを実行できるようにする |
java -version
が動作していても、
JAVA_HOME
が設定されていないことがあります。
Android StudioのGradle JDKを確認する
Android Studioでは、
Gradleが使用するJDKを個別に設定できます。
Android Studio内では正常にGradle Syncできるのに、
Terminalから
./gradlew
を実行すると
「JAVA_HOME is not set」が表示される場合があります。
これは、
Android StudioではGradle JDKが設定されている一方で、
OS側の
JAVA_HOME
が設定されていない場合などに発生します。
Gradleが使用しているJavaを確認する
Gradle Wrapperが実行できる状態であれば、
次のコマンドでGradleが使用しているJavaを確認できます。
./gradlew --version
Windowsでは、
次のように実行します。
gradlew.bat --version
JVMの情報を確認し、
意図したJDKが使用されているか確認します。
複数のJDKがインストールされている場合
PCにJava 11、
Java 17、
Java 21など複数のJDKがインストールされている場合は、
JAVA_HOME
が意図しないJDKを指していることがあります。
Android StudioのGradle JDK、
JAVA_HOME、
java -version
をそれぞれ確認します。
Android Gradle PluginやGradleが対応しているJDKを選択します。
JDKを更新した後に発生した場合
JDKを更新した後、
以前のJDKを削除すると、
JAVA_HOME
が存在しない古いフォルダを指したままになる場合があります。
JDK更新後に
「JAVA_HOME is not set」や
Java関連のエラーが発生した場合は、
現在のJDKの場所に
JAVA_HOME
を変更します。
Android Studioを更新した後に発生した場合
Android Studioを更新すると、
Gradleで推奨されるJDKや、
使用するAndroid Gradle Pluginの要件が変わる場合があります。
Android Studio内では新しいJDKが使用されていても、
OS側の
JAVA_HOME
が以前のJDKを指している場合があります。
Android StudioのGradle JDKと
JAVA_HOME
の両方を確認します。
古いプロジェクトを開いた場合
古いAndroidプロジェクトでは、
当時使用されていたJDKやGradleを前提としている場合があります。
現在の環境で
JAVA_HOME
を設定しても、
そのJavaバージョンが古いGradleに対応していない場合があります。
そのため、
JDKだけでなく、
Gradle WrapperやAndroid Gradle Pluginとの互換性も確認します。
JDKのバージョンが合っているか確認する
JAVA_HOME
を設定すれば、
どのJDKでも使用できるわけではありません。
Android Gradle Pluginによっては、
特定以上のJavaバージョンが必要になる場合があります。
逆に、
古いGradleでは新しすぎるJavaに対応していない場合があります。
JDK、
Gradle、
Android Gradle Pluginを互換性のある組み合わせにします。
「Android Gradle plugin requires Java」も表示される場合
JAVA_HOME
を設定した後に、
次のような別のエラーが表示される場合があります。
Android Gradle plugin requires Java 17 to run.
You are currently using Java 11.
この場合は、
JAVA_HOME
自体は認識されていますが、
指定しているJDKのバージョンが古い可能性があります。
Android Gradle Pluginが要求するJavaバージョンに対応した
JDKへ変更します。
「Unsupported class file major version」も表示される場合
JAVA_HOME
の変更後に、
「Unsupported class file major version」
が表示される場合があります。
この場合は、
新しく指定したJDKに対して
Gradleが古すぎる可能性があります。
Gradle Wrapperのバージョンと
使用しているJDKの互換性を確認します。
環境変数を変更した後はTerminalを再起動する
JAVA_HOME
や
PATH
を変更しても、
すでに開いているTerminalには
新しい設定が反映されない場合があります。
設定変更後は、
Terminalやコマンドプロンプトを閉じてから開き直します。
その後、
次のコマンドで設定を再確認します。
java -version
echo $JAVA_HOME
Android Studioを再起動する
JDKや環境変数の設定を変更した後は、
Android Studioを再起動することで
新しい設定が反映される場合があります。
再起動後、
Gradle Syncやビルドを再実行します。
Gradle Syncを再実行する
JavaやGradle JDKの設定を修正した後は、
Gradle Syncを再実行します。
Android Studioから
Sync Project with Gradle Files
などを実行します。
Java環境が正しく認識されていれば、
Gradle Syncが正常に進む可能性があります。
コマンドラインだけでエラーになる場合
Android Studioからは正常にビルドできる一方で、
Terminalから
./gradlew
を実行した場合だけ
「JAVA_HOME is not set」が表示されることがあります。
この場合は、
Android StudioのGradle JDKではなく、
Terminal側の
JAVA_HOME
や
PATH
を確認します。
Android StudioとTerminalでは、
Javaの参照方法が異なる場合があります。
CIや自動ビルド環境で発生する場合
ローカル環境では正常にビルドできても、
CIや自動ビルド環境で
「JAVA_HOME is not set」が発生する場合があります。
この場合は、
CI環境にJDKが用意されているか、
JAVA_HOME
が正しく設定されているか確認します。
ローカル環境とCI環境で異なるJava設定が使用されていると、
同じプロジェクトでも結果が異なる場合があります。
エラー別の確認ポイント
JavaやGradleに関するエラーによって、
確認すべき場所をある程度絞り込むことができます。
| 表示される内容 | 主な確認ポイント |
|---|---|
| JAVA_HOME is not set | JAVA_HOME、JDK、PATH |
| Android Gradle plugin requires Java | Gradle JDK、JDK、Android Gradle Plugin |
| Unsupported class file major version | JDK、Gradle、Android Gradle Plugin |
| Minimum supported Gradle version is … | Gradle Wrapper、Android Gradle Plugin |
| Gradle sync failed | 詳細エラー、Java・Gradle・プラグインの設定 |
解決しない場合の確認手順
原因が分からない場合は、
次の順番で確認すると問題を切り分けやすくなります。
- 「JAVA_HOME is not set」のエラー全文を確認する
java -versionでJavaが使用できるか確認する- 必要なJDKがインストールされているか確認する
JAVA_HOMEが設定されているか確認するJAVA_HOMEが正しいJDKの場所を指しているか確認する- JDKではなく
binフォルダなどを直接指定していないか確認する PATHのJava設定を確認する- 複数のJDKがインストールされていないか確認する
- Android StudioのGradle JDKを確認する
- 使用しているJDKがGradleやAndroid Gradle Pluginに対応しているか確認する
- 環境変数変更後にTerminalを再起動する
- 必要に応じてAndroid Studioを再起動する
- Gradle Syncを再実行する
- コマンドラインだけで発生する場合はTerminal側の設定を確認する
- CI環境の場合はCI側のJDKと
JAVA_HOMEを確認する
重要:
「JAVA_HOME is not set」が表示された場合は、
単にJavaをインストールするだけでなく、
JAVA_HOMEが実際に存在するJDKのルートディレクトリを指しているか、
さらにそのJDKがGradleやAndroid Gradle Pluginに対応しているかを確認することが重要です。
まとめ
Android StudioやGradleで表示される
「JAVA_HOME is not set」
は、
JDKの場所を示す
JAVA_HOME
が設定されていない場合や、
正しいJDKを指していない場合に発生するエラーです。
特にJDKを新しくインストールした場合、
Javaのバージョンを変更した場合、
TerminalからGradleを実行した場合などに発生することがあります。
まず
java -version
と
JAVA_HOME
の現在の設定を確認し、
使用するJDKの場所が正しく指定されているか確認します。
そのうえで、
Android StudioのGradle JDK、
PATH、
GradleやAndroid Gradle Pluginとの互換性も確認し、
設定変更後にTerminalやAndroid Studioを再起動してから
Gradle Syncを再実行すると、
原因を効率よく切り分けることができます。
