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業種以上の業務システムを開発/運用)が、 掲載コマンドを検証環境で実行し、再現〜解決〜確認まで通ることを確認しています。