So legen Sie die CLASSPATH-Variable für einen Ordner in Ubuntu fest

16

Ich weiß, dass export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHtools.jar zum KLASSENPFAD hinzugefügt wird, aber ich möchte den Ordner zum KLASSENPFAD setzen

so was

export CLASSPATH=/usr/local/java/lib/:$CLASSPATH

aber es funktioniert nicht.

Ramesh Kotha
quelle

Antworten:

11

Erstens CLASSPATHverursacht das Setzen der env var im Allgemeinen mehr Probleme als es löst - da nicht alle Apps den gleichen Klassenpfad benötigen / wollen und oft brechen, wenn unerwünschte oder sogar nicht benötigte Gläser im Klassenpfad enthalten sind. Eine Java-App sollte nur die Mindestanzahl an Gläsern enthalten, nicht mehr und nicht weniger.

Wenn Sie spezifisches haben, individuelle Anwendungen , die erfordern , dass der Classpath, in der Regel dann eingestellt wird , wird die Befehlszeilenoption bevorzugt: java -cp path1:path2:.... Der Befehl für Desktopsymbole kann geändert werden, um diese Optionen einzuschließen, oder Shellskripts können geändert werden, um diese Optionen einzuschließen.

Davon abgesehen (und da es immer Ausnahmen von der Regel gibt) können Sie in Abhängigkeit von der Version von Java (dies erfordert Java 6 oder höher) angeben, dass dem Klassenpfad ein ganzes Verzeichnis von JARs hinzugefügt werden soll, indem Sie ein " *" hinzufügen. am Ende eines Verzeichnisses; zB das Folgende:

 /dir1/foo.jar:/dir2/dir3:/dir5/dir6/*:etc...

Meint:

  • /dir1/foo.jar - (das einzelne Glas) wird zum Klassenpfad hinzugefügt;
  • /dir2/dir3- Alle nicht-jar'd Klassen in diesem Verzeichnis werden zum Klassenpfad hinzugefügt (müssen in der richtigen Paketstruktur sein; zB com.my.Foo.classmüssen in /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- Alle Gläser in diesem Verzeichnis (dh /dir5/dir6/*.jar) werden dem Klassenpfad hinzugefügt. Beachten Sie, dass " *" dies kein Platzhalter ist (Sie können nicht f*.jaroder nicht einmal verwenden *.jar). Es ist ein Sonderzeichen, das angibt, dass alle Gläser hinzugefügt werden sollen.

Wenn Sie dem Klassenpfad der Anwendung ein ganzes Verzeichnis mit JAR-Dateien hinzufügen müssen, wurde die App im Allgemeinen nicht ordnungsgemäß gebündelt. Vielmehr sollte die App ein Manifest mit der Liste der Gläser haben, von denen es abhängt. Oder zumindest sollte Ihrem Klassenpfad nur ein Glas hinzugefügt werden, und dieses Glas kann die gesamte Liste der Gläser in einem Unterverzeichnis enthalten.

michael
quelle
Ich brauche mehr als 5 Stunden, um das in Ubuntu 12.04 herauszufinden. Nachdem Sie eine Datei kompiliert und die Klasse ausgeführt haben, sind zwei Dinge wichtig. 1. Ob Sie Paket in Ihrer Klasse verwenden. Und Sie müssen "java -cp. ClassName" im übergeordneten Paketordner verwenden. 2. Sie müssen ".:" Wie "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *" verwenden.
Zhihong
@zhihong Sie sollten in Betracht ziehen, eine IDE wie Netbeans zu verwenden, die sich auf das verwendete Build-Tool bezieht, das Ihren Klassenpfad tatsächlich konfiguriert. Richten Sie in Netbeans ein neues Projekt mit Maven oder Gradle (oder Ant - dies wird jedoch zu kompliziert, wenn Sie mit Abhängigkeiten arbeiten (siehe auch: Maven Ant-Aufgaben, die ich Efeu vorziehen)). Gradle ist momentan das "heiße" Ding, fwiw; Sie sollten es versuchen. Außerdem (1) sollten Sie immer Paketnamen verwenden; und (2) es ist niemals notwendig, Klassen in das jvm-Verzeichnis im Klassenpfad aufzunehmen; Sie befinden sich bereits im Klassenpfad "boot".
Michael
danke für Ihren Vorschlag. Eigentlich verwende ich eclipse und der Code läuft dort korrekt, aber wenn ich es im Terminal laufen lasse, dann kommt die "ClassNotFoundException". Ich habe viele Möglichkeiten ausprobiert, die externe lib / jar hinzuzufügen, aber alle sind fehlgeschlagen. Schließlich funktioniert es, indem das jvm-Verzeichnis und die externe lib / jar in die Kommandozeile WITH aufgenommen werden. Aber ich habe heute versucht, Sie sind richtig, das jvm-Verzeichnis wird nicht benötigt.
Zhihong
2

Wenn Sie classpath dauerhaft setzen wollen, dann 1) finden Sie heraus, wo Java installiert ist. Sie können "whereis java" verwenden. openjdk-7/6 befindet sich in / usr / lib / jvm / .....

2) Wir müssen CLASSPATH in / etc / environment einrichten

  sudo gedit /etc/environment

3) füge die folgenden Likes hinzu .. (VERLASSE KEINE SPACES WÄHREND DER TYPISIERUNG) (Passe sie an deine Java-Version und -Installation an) (dieser Home-Pfad ist für Open JDK 7)

   JAVA_HOME="/usr/lib/jvm/java-7-openjdk-i386/bin"

   export JAVA_HOME

   CLASSPATH=".:/usr/lib/jvm/java-7-openjdk-i386/lib:/home/laptop/Desktop/a2"

   export CLASSPATH

Verzeichnis durch ":" trennen

Rightkushagra
quelle
Warum fügt jeder "{JAVA_HOME} / lib" zu seinem Klassenpfad hinzu? Es ist nicht notwendig oder gar eine gute Idee. In diesem Fall ist das Setzen von env CLASSPATH ebenfalls eine schlechte Idee, es sei denn, es befindet sich in einem Shell-Skript, nur für dieses Skript. In diesem Fall wäre die Befehlszeilenoption "-cp" für Java weiterhin vorzuziehen.
Michael
0

Terminal öffnen und eingeben

sudo nano ~ / .bashrc

Fügen Sie alle Exporte hinzu, die Sie brauchen, wie ...

exportiere JAVA_HOME = / usr / local / java / jdk1.6.0_06 (dein Pfad)

export ANT_HOME = / opt / ant / apache-ant-1.9.4

Starten Sie das Terminal neu, damit die Änderungen wirksam werden

Kumpel
quelle