Come impostare la variabile CLASSPATH per una cartella in Ubuntu


16

So che export CLASSPATH=/usr/local/java/tools.jar:$CLASSPATHaggiungerà tools.jar a CLASSPATH, ma voglio impostare la cartella su CLASSPATH

come questo

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

ma non funziona.

Risposte:


11

Innanzitutto, in generale, l'impostazione di env var di CLASSPATHsolito causa più problemi di quanti ne risolva, poiché non tutte le app desiderano / necessitano dello stesso percorso di classe e spesso si rompono quando nel percorso di classe sono inclusi barattoli indesiderati o addirittura non necessari. Un'app java dovrebbe includere solo il numero minimo di barattoli necessari, né più né meno.

Quando si dispone di specifiche, singole applicazioni che richiedano che il percorso di classe impostare, poi di solito l'opzione della riga di comando è preferito: java -cp path1:path2:.... È possibile modificare il comando delle icone del desktop per includere queste opzioni oppure è possibile modificare gli script della shell per includere queste opzioni.

Detto questo (e poiché ci sono sempre eccezioni alla regola), quindi a seconda della versione di java (questo richiede java 6 o successive), è possibile specificare che un'intera directory di barattoli venga aggiunta al classpath aggiungendo un " *" alla fine di una directory; ad esempio, quanto segue:

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

Si intende:

  • /dir1/foo.jar - (il singolo vaso) verrà aggiunto al percorso di classe;
  • /dir2/dir3- tutte le classi senza vaso in questa directory verranno aggiunte al percorso di classe (deve essere nella struttura del pacchetto corretta; ad esempio, com.my.Foo.classdeve essere in /dir2/dir3/com/my/Foo.class)
  • /dir5/dir6/*- tutti i barattoli in questa directory (cioè, /dir5/dir6/*.jar) verranno aggiunti al percorso di classe. Si noti che questo " *" non è un carattere jolly (non è possibile utilizzare f*.jaro addirittura *.jar); è un carattere speciale che indica "aggiungi tutti i barattoli"

In generale, se è necessario aggiungere un'intera directory di vasetti al percorso di classe dell'applicazione, l'app non è stata raggruppata correttamente. Piuttosto, l'app dovrebbe avere un manifest contenente l'elenco dei barattoli da cui dipende. O almeno, solo un barattolo dovrebbe essere aggiunto al tuo percorso di classe, e quel barattolo può avere nel suo manifesto l'intero elenco di barattoli in qualche sottodirectory.


Mi ci vogliono più di 5 ore per capirlo in Ubuntu 12.04. Dopo aver compilato un file ed eseguito la classe, due cose sono importanti. 1. Se usi un pacchetto nella tua classe. E devi usare "java -cp. ClassName" nella cartella principale del pacchetto. 2. Devi usare ".:" Come "java -cp.: / Usr / lib / jvm / java-1.6.0-openjdk-i386 / jre / lib / *: / dir2 / jarlib / *".
Zhihong,

@zhihong dovresti considerare di usare un IDE come netbeans, lasciandolo rimandare allo strumento di compilazione in uso, che configura effettivamente il tuo percorso di classe. In Netbeans, crea un nuovo progetto usando maven o gradle (o formica - ma questo diventa troppo complicato quando si tratta di dipendenze (vedi anche: compiti di maven ant, che preferisco all'edera)). Gradle è attualmente la cosa "calda", prima; dovresti provarlo. Inoltre, (1) dovresti sempre usare i nomi dei pacchetti; e (2) non è mai necessario includere le classi nella directory jvm nel classpath; sono già nel percorso di classe "boot".
michael,

grazie per il tuo suggerimento. In realtà, utilizzo eclipse e il codice viene eseguito correttamente lì, ma quando lo eseguo nel terminale, ho ottenuto "ClassNotFoundException". Ho provato molti modi per aggiungere il lib / jar esterno, ma tutto fallito. Infine, funziona includendo la directory jvm e lib / jar esterni nella riga di comando WITH. Ma, ho provato oggi, hai ragione, la directory jvm non è necessaria.
Zhihong,

2

se vuoi impostare il classpath in modo permanente allora 1) scopri dove è installato java .. puoi usare "whereis java" openjdk-7/6 in / usr / lib / jvm / .....

2) dobbiamo impostare CLASSPATH in / etc / environment

  sudo gedit /etc/environment

3) aggiungi i seguenti Mi piace .. (NON LASCIARE QUALSIASI SPAZIO DURANTE LA digitazione) (personalizza in base alla tua versione e installazione java) (questo percorso principale è per 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

directory separata per ":"


Perché tutti stanno aggiungendo "{JAVA_HOME} / lib" al loro percorso di classe? Non è necessario, o anche una buona idea. Del resto, impostare ENV CLASSPATH è anche una cattiva idea, a meno che non sia in uno script di shell, solo per quello script, nel qual caso l'opzione della riga di comando "-cp" su java sarebbe comunque preferibile.
michael,

0

terminale aperto e digitare

sudo nano ~ / .bashrc

aggiungi tutte le esportazioni di cui hai bisogno come ...

export JAVA_HOME = / usr / local / java / jdk1.6.0_06 (il tuo percorso)

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

riavviare infine il terminale per rendere effettive le modifiche

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.