Czy można użyć opcji -classpath
z java
, dodać lub zamienić zawartość zmiennej env CLASSPATH
?Opcja Java -classpath
Odpowiedz
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.
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 (.).
Zmienna środowiskowa * nie * jest aktualizowana w ogóle, zgodnie z tym. Nie widzę, jak odpowiedź brzmi "tak". –
@ 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
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.
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
Dobre pytanie. Nigdy o tym nie myślałem – marionmaiden
Czy chcesz się dowiedzieć, czy zmienna środowiskowa została zmieniona? Czy uruchomiłeś test, aby faktycznie * zobaczyć * czy się zmienił? –
Dlaczego nie spróbować samemu? –