Ein Klassenpfad ist eine Liste von Speicherorten, von denen Klassen geladen werden sollen.
Diese 'Speicherorte' können entweder Verzeichnisse oder JAR-Dateien sein.
Bei Verzeichnissen folgt die JVM einem erwarteten Muster zum Laden einer Klasse. Wenn ich das Verzeichnis C: / myproject / classes in meinem Klassenpfad habe und versuche, eine Klasse com.mycompany.Foo zu laden , wird im Klassenverzeichnis nach einem Verzeichnis namens com gesucht , dann unter diesem Verzeichnis nach mycompany und Schließlich wird in diesem Verzeichnis nach einer Datei namens Foo.class gesucht .
In der zweiten Instanz wird für JAR-Dateien die JAR-Datei nach dieser Klasse durchsucht. Eine JAR-Datei ist in Wirklichkeit nur eine komprimierte Sammlung von Verzeichnissen wie die oben genannten. Wenn Sie eine JAR-Datei entpacken, erhalten Sie eine Reihe von Verzeichnissen und Klassendateien, die dem obigen Muster folgen.
Die JVM durchläuft also einen Klassenpfad von Anfang bis Ende und sucht nach der Definition der Klasse, wenn sie versucht, die Klassendefinition zu laden. Zum Beispiel im Klassenpfad:
C: / myproject / classes; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
Die JVM wird versuchen , in dem Verzeichnis suchen Klassen zuerst, dann in stuff.jar und schließlich in otherstuff.jar .
Wenn Sie eine ClassNotFoundException erhalten, bedeutet dies, dass die JVM den gesamten Klassenpfad durchlaufen hat und die Klasse, auf die Sie verweisen wollten, nicht gefunden hat. Die Lösung besteht, wie so oft in der Java-Welt, darin, Ihren Klassenpfad zu überprüfen.
Sie definieren einen Klassenpfad in der Befehlszeile, indem Sie java -cp und dann Ihren Klassenpfad sagen . In einer IDE wie Eclipse haben Sie eine Menüoption, um Ihren Klassenpfad anzugeben.