2010-01-29 14 views
16

Czy można użyć opcji -classpath z java, dodać lub zamienić zawartość zmiennej env CLASSPATH?Opcja Java -classpath

+3

Dobre pytanie. Nigdy o tym nie myślałem – marionmaiden

+1

Czy chcesz się dowiedzieć, czy zmienna środowiskowa została zmieniona? Czy uruchomiłeś test, aby faktycznie * zobaczyć * czy się zmienił? –

+0

Dlaczego nie spróbować samemu? –

Odpowiedz

14

Użycie zmiennej typu ścieżka klasy zastępuje zmienną CLASSPATH środowiska, ale tylko dla tej sesji. Jeśli ponownie uruchomisz aplikację, musisz ponownie ustawić zmienną ścieżki klas.

+1

Idealny. Dzięki girienie za zwięzłą odpowiedź. Musisz być ekspertem od Javy :) – Zacky112

+0

@ Zack112: Bardzo ważne pytanie .. Dzięki :) – giri

5

Tak. Cytowany na stronie java(1) człowieka:

-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

Zmienna środowiskowa * nie * jest aktualizowana w ogóle, zgodnie z tym. Nie widzę, jak odpowiedź brzmi "tak". –

+2

@ S.Lott - Z którego punktu widzenia? Z * punktu widzenia * programu wartość CLASSPATH (jeśli istnieje) zostaje zastąpiona. Z * punktu widzenia * powłoki wartość CLASSPATH nie jest zmieniana. Myślę, że pierwotne pytanie było po prostu źle sformułowane. – Nate

6

Albo jedna z opcji jest używana, nie obu.

Określanie opcji -classpath lub -cp zastępuje dowolne ustawienie zmiennej środowiskowej CLASSPATH.

...

Opcja -classpath jest korzystny, ponieważ można ustawić indywidualnie dla każdej aplikacji bez wpływu na inne aplikacje i innych aplikacji bez zmiany jego wartości.

...

Ustawianie zmiennej CLASSPATH lub za pomocą opcji wiersza polecenia -classpath nadpisuje że domyślnie, więc jeśli chcesz dołączyć aktualny katalog w ścieżce wyszukiwania, należy uwzględnić " . " w nowych ustawieniach.

6

Użycie opcji -cp nie wpłynie na zmienną środowiskową CLASSPATH.

Można spróbować ten mały fragment kodu, aby to sprawdzić:

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

Wyjście bez opcji Cp:

%java CPTest 
/home/test/:. 

Wyjście z opcji Cp:

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

Dane wyjściowe są takie same dla obu wywołań (jedna z -cp i jedna bez).

także albo ścieżka określono w zmiennej środowiska Classpath
stosować albo ścieżka określony z -cp możliwość użycia. To nie jest mieszanka zarówno jest jednym z nich.

Jest to widoczne z poniższej inwokacji. Jeśli CWD (bieżący katalog roboczy „”)
jest wyłączony z opcją Cp, wyrzutnia JVM (tj Java) nie można znaleźć klasy plik mimo zmiennej środowiskowej CLASSPATH zawierającej CWD
(„”) w tym.

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