2010-01-07 15 views
7

Ich tat dies vor:Wie sollte ich CLASSPATH setzen?

CLASSPATH = ":./Home/phoenies/jdk1.6.0_17/lib/tools.jar: /home/phoenies/jdk1.6.0_17/lib/dt.jar"

Aber heute ein Artikel sagt, dass ich das tun sollte:

CLASSPATH = ":./home/phoenies/jdk1.6.0_17/lib"

Wenn ich so tun, wird es se Arch alle JAR-Dateien in lib? Also ist es wahrscheinlich ein kürzerer Weg?

Antwort

12

Da Sie JDK6 verwenden, können Sie Classpath Platzhalter verwenden: CLASSPATH = ":./Home/phoenies/jdk1.6.0_17/lib/*" werden alle JARS innerhalb lib passen/

Check out http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html es Ein Abschnitt mit dem Namen "Erläuterungen zu Pfadzeichen für Klassenpfade"

+3

+100. Ich hatte keine Ahnung, dass es Klassenpfad-Wildcards gab. –

+0

Vielen Dank für Ihre rechtzeitige Antwort :) – phoenies

+0

sehr interessant. +1. Ich würde jedoch gegen die Verwendung von "sollte" argumentieren, da es keine explizite Reihenfolge der geladenen Dateien gibt, so könnte es zu unerwartetem Verhalten kommen, wenn Sie mehrere JAR-Dateien mit verschiedenen Versionen derselben Klasse in Ihrem Verzeichnis haben. – akf

1

Ja, es wird alle JAR-Dateien in Lib durchsuchen, wenn Sie es auf die zweite Weise tun. Es ist ziemlich merkwürdig zu sehen, dass der Klassenpfad genau so gesetzt wird wie im ersten. Ich nehme an, auf einem Server, wo Sie sicher sein wollten, welche Gläser geladen wurden, könnte das eine Möglichkeit sein, sie einzuschränken, aber Sie könnten Probleme bekommen, wie lange es dauern könnte, wenn Sie mehrere Gläser hätten.

+0

O Wirklich? Die Definition eines Verzeichnisses im Klassenpfad war immer die Suche nach nackten .class-Dateien. – bmargulies

+3

Falsch. Sie müssen JARs einzeln auflisten. – duffymo

0

Jar-Dateien müssen in der Variablen Classpath anhand ihres Namens angegeben werden. Beachten Sie, dass die Befehlszeile -classpath param vielseitiger als die Umgebungsvariable ist, da Sie damit einen Klassenpfad pro Anwendung festlegen können.

0

In Java 1.6+ können Sie den Klassenpfad auf ein Verzeichnis setzen, gefolgt von/*, um alle JAR-Dateien in diesem Verzeichnis zu laden. Nicht nur der Verzeichnisname, sondern auch das Laden von Klassendateien in diesem Verzeichnis und in Unterverzeichnissen.

1

Ich denke, eine CLASSPATH-Umgebungsvariable ist falsch für alle außer die einfachste von "Hello, World" Tutorials.

Der richtige Weg ist, den CLASSPATH für jedes Projekt beim Kompilieren und Ausführen einzustellen. Jedes Projekt wird wahrscheinlich anders sein, also ist das durchaus sinnvoll.

IDEs ignorieren CLASSPATH-Umgebungseinstellungen; das Gleiche gilt für alle Java EE App-Server. Es ist ein Relikt von Java 1.0. Ich habe CLASSPATH auf keiner Maschine, an der ich arbeite, eingestellt.

Lernen Sie, es für die Befehlszeile zu skripten. Oder benutze Ant. Du wirst froh sein, dass du es getan hast.

+0

Oh, ich dachte, es ist nur eine Konvention. – phoenies

Verwandte Themen