2012-02-17 8 views
8

Próbuję zrozumieć, jak naprawdę działa ścieżka klas. Po przeszukaniu całego internetu to gdzie doszedłem tak daleko:Ścieżka klasy Java - Linux

Dodałem

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

na /etc/environment. Używam Ubuntu przy okazji.

Java znajduje ścieżkę i kompiluje bez problemu.

Problem polega na tym, że jeśli zmienię CLASSPATH, a następnie: source /etc/environment, nowa funkcja CLASSPATH nie zostanie zastosowana. Jest stosowany wtedy i tylko wtedy, gdy ponownie uruchomię system. Na przykład, jeśli usunę linię

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

, następnie zrobić source/etc/environment, a ja w końcu zrobić echo $CLASSPATH, co mam jest /home/foo:/home/foo/Java_code/my_code. Myślę, że powinienem dostać pustą linię, czy nie powinienem?

Czy istnieje sposób na zastosowanie zmian w zmiennych PATH lub CLASSPATH natychmiast, bez konieczności ponownego uruchamiania systemu?

To może pomóc wiedzieć, że plik/etc/environment pierwotnie zawierał tylko następujący wiersz:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" 

Dziękuję za poświęcony czas.

+0

Jak usuwasz ścieżkę klas? –

+0

dlaczego robisz te wszystkie rzeczy, jakie jest twoje środowisko?/etc/environment służy do definiowania zmiennych środowiskowych dla aplikacji graficznych. Jeśli masz grafikę, możesz użyć IDE. Po co zajmować się tym wszystkim problemami z włączaniem folderu domowego i projektów w ścieżkę klas? – hovanessyan

+0

Po prostu próbuję na stałe ustawić CLASSPATH w celu zaimportowania pakietów z określonych folderów bez konieczności definiowania go za każdym razem, gdy uruchamiam javac. – tomatoeggs

Odpowiedz

5

Myślę, że nie powinieneś umieszczać żadnych ścieżek, które lokalnie w twoim katalogu domowym w pliku o szerokości całego systemu. Zostawiłabym dobrze /etc/environment, chyba że wprowadzisz jakieś zmiany, które są konieczne lub korzystne dla wszystkich użytkowników. Wprowadź zmiany w zmiennej CLASSPATH w swoim .bashrc w swoim katalogu domowym.

CLASSPATH=$CLASSPATH:/home/foo:/home/foo/Java_code/my_code 
    export CLASSPATH 

W ten sposób można go pobrać, a każde nowo uruchomione bash będzie miało ustawienia od razu.

+1

To działało dobrze. Teraz wszystko wydaje się być gładkie. Dziękuję za pomoc. – tomatoeggs

2

Po usunięciu

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

wiersz, a następnie source ... nie byłoby usunąć CLASSPATH ponieważ został już ustawiony. Nie eliminuje zmiennych, które zostały już zdefiniowane.

+0

A więc jedynym sposobem jest zresetowanie systemu, aby zastosować nową funkcję CLASSPATH? – tomatoeggs

+0

Możesz umieścić 'export CLASSPATH ="/home/foo:/home/foo/Java_code/my_code " ' w twoim pliku '.bashrc' w twoim' ~ 'directoy, aby ustawić zmienne przy każdym logowaniu. Aby odłączyć zmienną CLASSPATH, zrób 'unset CLASSPATH' –

+0

Dziękuję Sapan. Twoje komentarze naprawdę mi pomogły. Teraz wszystko jest gładkie. – tomatoeggs

1

Plik /etc/environment nie jest normalnym skryptem powłoki; nie jest wykonywany jako skrypt powłoki podczas uruchamiania lub logowania do systemu. Uruchomienie go z source /etc/environment nie jest takie samo, jak przy normalnym uruchomieniu systemu.

Patrz: Ubuntu environment variables

/etc/environment - Ten plik udostępniony jest specjalnie przeznaczona do ustawień zmiennych środowiskowych dla całego systemu. Nie jest to plik skryptowy, ale raczej składa się z wyrażeń przypisania, po jednym na linię. W szczególności plik ten przechowuje ogólnosystemowe ustawienia ustawień narodowych i ścieżek.

+0

Dziękuję Jesper. Twoje informacje są naprawdę cenne. – tomatoeggs

4
export CLASSPATH="" 

lub lepiej

unset CLASSPATH 

usunie istniejący Classpath. Istnieje wiele lokalizacji, w których możesz ustawić lub anulować konfigurację ścieżki klas - brakujący wpis nie anuluje jej.