Aus gegebenem Anlass mal wieder eine kleine Abhandlung zu einem Basic-Thema aus dem Javabereich.
Was ist der Classpath?
Im Classpath sind die Orte referenziert an denen nach bestimmten Java Klassen gesucht werden kann. Er kann per Commandline gesetzt werden oder je Aufruf individuell überlagert werden.
Kleines Beispiel:
package at.nullpointer.classpath
public class SimpleHello {
public static void main(String[] args) {
System.out.println("Hello nullpointerat");
}
}
Wenn dieses Klasse kompilliert aus der Sicht eines Windows XP Systems in c:\tmp (mitsamt den Packageordnern versteht sich, also c:\tmp\at\nullpointer\classpath\SimpleHello.class) liegt kann es mittels folgenden Aufrufen gestartet werden
- Direkt aus dem Verzeichnis c:\tmp mit:
java at.nullpointer.classpath.SimpleHello - Durch mitgeben des Classpathes beim Aufruf:
java -classpath c:\tmp at.nullpointer.classpath.Simplehello - Durch vorheriges setzen des Classpathes:
set CLASSPATH=c:\tmp
java at.nullpointer.classpath.SimpleHello
Wozu brauchen wir dann den Classpath?
Erweitern wir obriges Beispiel etwas:
package at.nullpointer.classpath
import at.nullpointer.constants.Classpath;
public class SimpleHello {
public static void main(String[] args) {
System.out.println(Classpath.getText());
}
}
Hier importieren wir eine zusätzliche Klasse um unserem SimpleHello einen Text zu entlocken. Wenn wir diese zusätzliche Klasse zB nur als Jar File library.jar zur Verfügung haben, das z.B. im Verzeichnis c:\tmp\lib liefern obige Aufrufe Fehler.
Per Classpath muss nun also die VM auf die zusätzliche Bibliothek hingewiesen werden, damit der Code korrekt ablaufen kann:
set CLASSPATH=C:\tmp;C:\tmp\lib\library.jar
java at.nullpointer.classpath.SimpleHello
Dabei ist darauf zu achten dass der volle Name bis zur Jar angegeben wird, eine Wildcard auf das lib verzeichnis selbst reicht nicht. Jars werden dabei behandelt wie normale Ordner, die sie in komprimierter Form ja auch darstellen.
Um mehrere Einträge zu separieren wird unter Windows das Semikolon (“ ; „) genutzt, unter Unix Systemen wie div. Linux und auch Mac OS X wird das Kolon dafür verwendet (“ : „).
Wichtig ist dabei die Reihenfolge der Importe, der Intepreter geht diese immer von vorne nach hinten druch um die gesuchten Klassen zu finden. Der Einsprungspunkt der im java Aufruf angesprochen wird sollte dabei an erster Stelle stehen, will man keine NoClassDefFoundError Exception erhalten.
Quelle: http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/classpath.html
Schreibe einen Kommentar