2010-01-29 15 views
16

L'uso dell'opzione -classpath con java, aggiungere o sostituire il contenuto della variabile env CLASSPATH?Java -classpath option

+3

Buona domanda. Non ci ho mai pensato – marionmaiden

+1

Vuoi sapere se la variabile d'ambiente è cambiata? Hai eseguito un test per vedere * effettivamente * se è cambiato? –

+0

Perché non provarlo tu stesso? –

risposta

14

Utilizzando la variabile classpath sostituisce la variabile CLASSPATH della variabile Ambiente ma solo per quella sessione. Se si riavvia l'applicazione, è necessario impostare nuovamente la variabile classpath.

+1

Perfetto. Grazie giri per una risposta concisa. Devi essere un esperto di Java :) – Zacky112

+0

@ Zack112: domanda molto importante .. Grazie :) – giri

5

Sì. Citato dalla pagina java(1) man:

-classpath classpath 
    -cp classpath 
      Specifies a list of directories, JAR archives, and ZIP archives to search for class files. Class 
      path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the 
      CLASSPATH environment variable. 

      If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the cur- 
      rent directory (.). 
+2

La variabile di ambiente è * non * aggiornata affatto, secondo questo. Non vedo come la risposta sia "sì". –

+2

@ S.Lott - Da quale punto di vista? Dal punto di vista del * programma * il valore CLASSPATH (se esiste) viene sostituito. Dal punto di vista * della shell *, il valore CLASSPATH non viene modificato. Penso che la domanda originale fosse formulata male. – Nate

6

una delle due opzioni è usato, non entrambi.

Specificare -classpath o -cp sovrascrive qualsiasi impostazione della variabile di ambiente CLASSPATH.

...

L'opzione -classpath è preferibile perché è possibile impostare individualmente per ogni applicazione senza influenzare altre applicazioni e senza altre applicazioni che modificano il suo valore.

...

Impostazione della variabile CLASSPATH o utilizzando l'opzione della riga di comando -classpath ignora che di default, quindi se si desidera includere la directory corrente nel percorso di ricerca, è necessario includere " ". nelle nuove impostazioni.

6

L'utilizzo dell'opzione -cp non influisce sulla variabile di ambiente CLASSPATH.

Si può provare questo piccolo frammento di codice per controllare questo:

public class CPTest { 
    public static void main (final String[] args) { 
     String cp = System.getenv("CLASSPATH"); 
     System.out.println(cp); 
    } 
} 
%echo $CLASSPATH 
/home/test/:. 

L'uscita senza opzione -cp:

%java CPTest 
/home/test/:. 

L'uscita con l'opzione -cp:

%java -cp /home/xanadu:. CPTest 
/home/test/:. 

L'output è uguale per entrambe le chiamate (una con -cp e una senza).

anche sia il percorso specificato nella variabile ambiente CLASSPATH è
utilizzati o il percorso specificato è utilizzato con cp opzione. Non è un mix di entrambi è uno di loro.

Questo è evidente dall'invocazione sottostante. Se la CWD (directory di lavoro corrente "")
è escluso dalla possibilità cp, il lanciatore JVM (cioè Java) non riesce a trovare il file
di classe, nonostante la variabile d'ambiente CLASSPATH contenente CWD ("") dentro.

%java -cp /home/test CPTest 
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest