私は、次の2つのクラスを含むjarファイルfoobar.jar
を持っている:Javaクラスは、クラスパスに存在するが、起動がエラーで失敗します。メインクラスを見つけるか、ロードできませんでした
public class Foo {
public static void main(String[] args) {
System.out.println("Foo");
}
}
他のクラスには、次のようになります。
私は、次のコマンドを使用してプログラムを実行すると予想されるように、プログラムの動作やプリントFoo
:
$ java -cp foobar.jar Foo
Foo
$
しかし、私はクラスBar
でmainメソッドを使用してプログラムを起動しようとした場合、JVMは起動エラーを出力して終了します:
$ java -cp foobar.jar Bar
Error: Could not find or load main class Bar
$
これは私がプログラムを起動しようとするかのように同じエラーですjarファイルにないクラスを使用します。
$ java -cp foobar.jar BarNotThere
Error: Could not find or load main class BarNotThere
$
なぜこのエラーが発生しますか? Foo.main
メソッドを起動でき、jarからクラスBar
を逆コンパイルすることができるという事実は、クラスがクラスパス上で利用可能であることを証明します。私はこのことがクラスパス上にないインターフェイスItemProcessor
と関係があることを理解しています。しかし、その場合に私はjava.lang.ClassNotFoundException
を受け取るべきではありませんか?
この問題は、部分的にhttp://stackoverflow.com/questions/18093928/what-does-could-not-find-or-load-main-class-meanで覆われていることに注意してください。私はこの問題に遭遇し、上記の質問を使用して解決しようとしました。しかし、クラスパス上にないスーパークラスの問題は一種のエッジケースなので、最初は解決できませんでした。これが新しいQ/Aとしてこの特定のケースを追加した理由です。 – boskoop