L'uso dell'opzione -classpath
con java
, aggiungere o sostituire il contenuto della variabile env CLASSPATH
?Java -classpath option
risposta
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.
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 (.).
La variabile di ambiente è * non * aggiornata affatto, secondo questo. Non vedo come la risposta sia "sì". –
@ 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
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.
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
Buona domanda. Non ci ho mai pensato – marionmaiden
Vuoi sapere se la variabile d'ambiente è cambiata? Hai eseguito un test per vedere * effettivamente * se è cambiato? –
Perché non provarlo tu stesso? –