MeWrite Docs

UnsupportedClassVersionError

Javaのコンパイル時と実行時のバージョン不一致で発生するエラー

概要

UnsupportedClassVersionErrorは、より新しいバージョンのJDKでコンパイルされたクラスファイルを、古いバージョンのJREで実行しようとした場合に発生します。

エラーメッセージ

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/example/MyClass
  has been compiled by a more recent version of the Java Runtime (class file version 65.0),
  this version of the Java Runtime only recognizes class file versions up to 61.0

クラスファイルバージョンとJDKの対応

クラスファイルバージョンJDKバージョン
52.0Java 8 (LTS)
55.0Java 11 (LTS)
61.0Java 17 (LTS)
65.0Java 21 (LTS)
66.0Java 22
67.0Java 23

原因

  1. JDKバージョンの不一致: コンパイルに使用したJDKが、実行環境のJREより新しい
  2. CI/CDと本番環境の差異: ビルドサーバーと実行サーバーでJavaバージョンが異なる
  3. 依存ライブラリのバージョン: サードパーティJARが新しいJDKでコンパイルされている
  4. JAVA_HOMEの設定ミス: 環境変数が意図しないJDKを指している

解決策

1. 実行環境のJavaバージョンを確認・更新する

1
2
3
4
5
6
7
8
# 実行環境のJavaバージョン確認
java -version

# コンパイル環境のJDKバージョン確認
javac -version

# クラスファイルのバージョン確認
javap -verbose MyClass.class | grep "major version"

2. –releaseオプションでコンパイルする

ターゲットの実行環境に合わせたバージョンでコンパイルする。

1
2
# Java 17環境向けにJDK 21でコンパイル
javac --release 17 MyClass.java

3. Mavenでターゲットバージョンを指定する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <!-- または --release を使用(推奨) -->
    <maven.compiler.release>17</maven.compiler.release>
</properties>

<!-- もしくはpluginで明示指定 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <release>17</release>
            </configuration>
        </plugin>
    </plugins>
</build>

4. Gradleでターゲットバージョンを指定する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

// Kotlin DSL
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
}

5. JAVA_HOMEを正しく設定する

1
2
3
4
5
6
7
# macOS / Linux
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
echo $JAVA_HOME

# 複数バージョンの管理にはsdkmanが便利
sdk install java 17.0.9-tem
sdk use java 17.0.9-tem

関連エラー

Java の他のエラー

最終更新: 2026-02-03