Der Klassenpfad ist der Ort, an dem der Java-Compiler (Befehl: javac) und der JVM (Befehl: java) suchen, um Klassen zu finden, auf die sich Ihre Anwendung bezieht. Was bedeutet es für eine Anwendung, eine andere Klasse zu referenzieren? In einfachen Worten bedeutet dies, dass Klasse irgendwo in ihrem Code zu verwenden:
Beispiel:
public class MyClass{
private AnotherClass referenceToAnotherClass;
.....
}
Wenn Sie versuchen, diese (javac) zu kompilieren, wird der Compiler die Klasse Andere benötigen. Dasselbe, wenn Sie versuchen, Ihre Anwendung auszuführen: Die JVM benötigt die Klasse AnotherClass. Um diese Klasse zu finden, sehen der Javac und die JVM in einer bestimmten (Menge von) Orten aus. Diese Stellen werden durch den Klassenpfad angegeben, der unter linux eine durch Doppelpunkte getrennte Liste von Verzeichnissen ist (Verzeichnisse, in denen javac/JVM suchen sollte, um die AnotherClass zu finden, wenn sie sie brauchen).
Um also Ihre Klasse zu kompilieren und dann auszuführen, sollten Sie sicherstellen, dass der Klassenpfad das Verzeichnis enthält, das die AnotherClass-Klasse enthält. Dann können Sie es wie folgt aufrufen:
javac -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass.java //to compile it
java -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass //to run it
kommen in der Regel Klassen in Form von „Bündel“ genannt JAR-Dateien/Bibliotheken.In diesem Fall müssen Sie sicherstellen, dass das Glas die Andere Klasse enthält, auf Ihre classpaht ist:
javac -classpath "dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass.java //to compile it
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass //to run it
In den obigen Beispielen sehen Sie, wie eine Klasse (MyClass.java) im Arbeitsverzeichnis zu kompilieren und zu Führen Sie dann die kompilierte Klasse aus (Beachten Sie das "." am Anfang des Klassenpfads, der für das aktuelle Verzeichnis steht). Dieses Verzeichnis muss auch zum Klassenpfad hinzugefügt werden. Andernfalls kann die JVM sie nicht finden.
Wenn Sie Ihre Klasse in einer JAR-Datei haben, wie Sie in der Frage angegeben haben, müssen Sie sicherstellen, dass sich jar zusammen mit dem Rest der benötigten Verzeichnisse im Klassenpfad befindet.
Beispiel:
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" MyClass //to run it
oder allgemeinere (einige Pakethierarchie vorausgesetzt):
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" package.subpackage.MyClass //to run it
Um die Classpath-Einstellung zu vermeiden, jedes Mal wenn Sie eine Anwendung ausführen möchten, können Sie eine Umgebungsvariable definieren CLASSPATH genannt.
In Linux, in Eingabeaufforderung:
export CLASSPATH="dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN"
oder ~/.bashrc bearbeiten und diese Zeile irgendwo am Ende hinzufügen; Der Klassenpfad unterliegt jedoch häufigen Änderungen. Daher empfiehlt es sich, den Klassenpfad auf einen Kernsatz von Verzeichnissen zu setzen, den Sie häufig benötigen, und dann den Klassenpfad jedes Mal zu erweitern, wenn Sie nur für diese Sitzung benötigen. Wie folgt:
export CLASSPATH=$CLASSPATH:"new directories according to your current needs"
Mögliches Duplikat von [Einschließlich aller Dateien in einem Verzeichnis innerhalb des Java-Klassenpfads] (https://stackoverflow.com/questions/219585/including-all-the-jars-in-a-directory) -within-the-java-classpath) – Stewart