PC パソコン

Android Studio「JAVA_HOME is not set」の原因と解決方法

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_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・プラグインの設定

解決しない場合の確認手順

原因が分からない場合は、
次の順番で確認すると問題を切り分けやすくなります。

  1. 「JAVA_HOME is not set」のエラー全文を確認する
  2. java -versionでJavaが使用できるか確認する
  3. 必要なJDKがインストールされているか確認する
  4. JAVA_HOMEが設定されているか確認する
  5. JAVA_HOMEが正しいJDKの場所を指しているか確認する
  6. JDKではなくbinフォルダなどを直接指定していないか確認する
  7. PATHのJava設定を確認する
  8. 複数のJDKがインストールされていないか確認する
  9. Android StudioのGradle JDKを確認する
  10. 使用しているJDKがGradleやAndroid Gradle Pluginに対応しているか確認する
  11. 環境変数変更後にTerminalを再起動する
  12. 必要に応じてAndroid Studioを再起動する
  13. Gradle Syncを再実行する
  14. コマンドラインだけで発生する場合はTerminal側の設定を確認する
  15. 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を再実行すると、
原因を効率よく切り分けることができます。