この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:6
ページ更新者:atom
更新日時:2026-06-11 07:10:02

タイトル: No compiler is provided in this environment
SEOタイトル: No compiler is provided in this environment (Maven) の原因と対処

この記事の要点
  • Maven / Eclipse / Gradle で 「No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?」 が出るケース
  • 原因: JRE で Java を実行している(JDK が必要)。Maven は javac を含む JDK が無いとビルドできない
  • JAVA_HOME が JRE を指している、または Eclipse の Installed JREs が JRE を指していることが典型
  • 対処: ① JDK をインストール(OpenJDK / Temurin / Oracle JDK)→ ② JAVA_HOME を JDK パスに → ③ javac -version で確認
  • Eclipse は Window → Preferences → Java → Installed JREs に JDK を追加し、ワークスペース全体に適用

このエラーの概要

Maven でビルドしようとすると次のエラーで止まります:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project myapp:
[ERROR]   No compiler is provided in this environment.
[ERROR]   Perhaps you are running on a JRE rather than a JDK?

原因はシンプルで、Maven の maven-compiler-plugin がコンパイラ(javac)を見つけられないからです。JRE(Java Runtime Environment)は実行のみで javac を含まず、JDK(Java Development Kit)が必要です。

JRE / JDK の違い

項目JREJDK
主な用途Java アプリの実行Java アプリの開発 + 実行
含むコマンドjavajava + javac + jar + javadoc
サイズ
Maven でビルド×(このエラーが出る)

Java 11 以降は Oracle が JRE 単体配布を廃止し、JDK のみが配布される流れです。それでも環境変数や IDE の設定で「古い JRE を指している」状態は頻発します。

確認コマンド

# 1. java と javac が両方あるか
java -version
javac -version

# Linux/Mac で JAVA_HOME を確認
echo $JAVA_HOME

# Windows
echo %JAVA_HOME%

# Maven が認識している Java
mvn -version
# Maven home: /usr/share/maven
# Java version: 17.0.x, vendor: Eclipse Adoptium
# Java home: /usr/lib/jvm/temurin-17-jdk-amd64/jre  <- ここに /jre が付いてたらアウト

javac -versionjavac: command not found なら JDK 未インストール。mvn -version の Java home が .../jre で終わっているなら JRE を見ています。

対処 1: JDK のインストール

OpenJDK 系(Eclipse Temurin / Microsoft OpenJDK / Amazon Corretto / Azul Zulu)または Oracle JDK のいずれかを導入します。最も簡単なのはパッケージマネージャ:

# Ubuntu / Debian
sudo apt update
sudo apt install -y openjdk-17-jdk

# RHEL / CentOS / Rocky
sudo dnf install -y java-17-openjdk-devel

# macOS (Homebrew)
brew install --cask temurin@17

# Windows (Chocolatey)
choco install temurin17

# Windows (winget)
winget install EclipseAdoptium.Temurin.17.JDK

# 確認
javac -version

対処 2: JAVA_HOME を JDK に向ける

# Linux / macOS(.bashrc または .zshrc)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

# macOS で自動判定
export JAVA_HOME=$(/usr/libexec/java_home -v 17)

# 反映
source ~/.bashrc

# Windows(PowerShell、永続化)
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Eclipse Adoptium\jdk-17.0.x-hotspot", "Machine")
# システム環境変数 Path に %JAVA_HOME%\bin を追加

重要: JAVA_HOME には .../jdk-17 までを設定し、.../jdk-17/jre.../jdk-17/bin含めないでください。

対処 3: Eclipse の Installed JREs

Eclipse は OS の JAVA_HOME を参照せず、Eclipse 起動時に同梱の JRE を使うことがあるため、別途設定が必要です:

  1. Window → Preferences → Java → Installed JREs
  2. Add → Standard VM → JRE home に JDK のパスを指定(例: C:\Program Files\Eclipse Adoptium\jdk-17.0.x-hotspot
  3. 追加した JDK のチェックを ON にして既定に
  4. Window → Preferences → Java → Compiler で Compliance level を 17 等に合わせる
  5. プロジェクト右クリック → Properties → Java Build Path → Libraries で JRE System Library を更新
  6. Project → Clean でビルドし直し

対処 4: Maven の pom.xml で明示

プロジェクト側でも Java バージョンと tools.jar パスを明示できます:

<project>
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
          <source>17</source>
          <target>17</target>
          <!-- フォークして特定の javac を使う -->
          <fork>true</fork>
          <executable>${JAVA_HOME}/bin/javac</executable>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

対処 5: ~/.mavenrc / setenv.sh

Maven 起動時の Java を強制できます:

# ~/.mavenrc
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

# またはプロジェクトに setenv.sh / mvnw を入れて wrapper 経由起動
./mvnw clean install

Windows 特有のハマりどころ

  • Oracle JRE が C:\Program Files (x86)\Java\jre1.8.0_xxx\ に残っていて PATH の先頭にいる → 削除またはPATH 順を整理
  • JAVA_HOME を変えてもコマンドプロンプトを開き直さないと反映されない
  • システム環境変数とユーザー環境変数の両方で JAVA_HOME を設定していて競合 → どちらか片方に統一
  • IDE(IntelliJ / Eclipse)は独自に JDK を持つ → IDE 側の設定も必須

FAQ

Q: java -version は通るのに javac -version が無い
A: JRE のみがインストールされている状態です。JDK を入れて PATH と JAVA_HOME を JDK に向け直してください。

Q: JDK を入れても直らない
A: mvn -version の Java home が JRE のままなら、JAVA_HOME の値かシェルの再読み込み忘れの可能性。echo $JAVA_HOMEwhich javac を必ず確認してください。

Q: 複数バージョンを使い分けたい
A: Linux/Mac は SDKMAN!、Windows は jabba / scoop を使うと sdk use java 17 等で切替できます。