C
その他検証済み

Error: Could not find or load main class の原因と直し方【Dockerで検証済み】

Error: Could not find or load main class の原因と解決方法。検証済みの解決コマンド付きで、現象→原因→解決→確認の順に最短で直せます。

発生したエラー

エラー出力
Error: Could not find or load main class

結論:まずこれで直ります

「Error: Could not find or load main class」は、JVMが指定されたクラスをクラスパス上で見つけられない場合に発生します。下の解決コマンドを順に実行すれば直ります。

解決コマンド
cd /tmp/javatest
java -cp . Hello

現象どんなエラーか

次の操作を行うと(検証環境: eclipse-temurin:17)、上記のエラーが発生します。まずは下の再現コマンドで、同じ状況を再現できることを確認してください。

検証環境:eclipse-temurin:17

再現コマンド
mkdir -p /tmp/javatest
cat > /tmp/javatest/Hello.java << 'EOF'
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
EOF
cd /tmp/javatest
javac Hello.java
java -cp /wrong/path Hello

原因なぜ起きるのか

「Error: Could not find or load main class」は、JVMが指定されたクラスをクラスパス上で見つけられない場合に発生します。主な原因は `-cp`(`-classpath`)オプションで指定したパスが間違っているか、そもそも指定していないことです。Javaはクラスファイル(.class)をクラスパスから検索するため、正しいディレクトリを `-cp .`(カレントディレクトリ)や `-cp /path/to/classes` で明示する必要があります。`javac` でコンパイル後、カレントディレクトリに `.class` ファイルが生成される場合は `-cp .` を付けて実行するのが基本です。また、パッケージ構造がある場合はパッケージルートのディレクトリを `-cp` に指定し、クラス名も `com.example.Hello` のように完全修飾名で指定する必要があります。

解決解決手順

修正コマンド
cd /tmp/javatest
java -cp . Hello

確認直ったか確認する

確認コマンド
cd /tmp/javatest
output=$(java -cp . Hello)
echo "$output"
echo "$output" | grep -q 'Hello, World!' && exit 0 || exit 1

動画で見る

この記事の解決手順は実環境で検証しています

山田 英紀(社内SE 5年以上・13業種以上の業務システムを開発/運用)が、 掲載コマンドを検証環境で実行し、再現〜解決〜確認まで通ることを確認しています。

この手順でも直らない・自社の環境で再現する場合

エラー調査・修正から、業務システムの改善までご相談いただけます。

無料で相談する