Java Classpath


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

Ähnliche Artikel:

Autor: Thomas Pummer

Thomas Pummer ist Softwareentwickler an der Universität Wien. In seiner Freizeit betreut er das Open Source Projekt TrayRSS und werkt an diversen anderen kleinen Projekten. Er ist sehr interessiert an Open Source und Webentwicklung und testet gern neue Programmiersprachen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*