Ścieżka klasy
Ścieżka klasy to parametr w wirtualnej maszynie Java lub kompilatorze Java , który określa lokalizację klas i pakietów zdefiniowanych przez użytkownika . Parametr można ustawić w linii poleceń lub za pomocą zmiennej środowiskowej .
Przegląd i architektura
Podobnie jak w przypadku klasycznego dynamicznego ładowania , podczas wykonywania programów Java wirtualna maszyna Java znajduje i ładuje klasy z opóźnieniem (ładuje kod bajtowy klasy tylko wtedy, gdy klasa jest używana po raz pierwszy). Ścieżka klasy mówi Javie, gdzie w systemie plików ma szukać plików definiujących te klasy.
Maszyna wirtualna wyszukuje i ładuje klasy w następującej kolejności:
- klasy ładowania początkowego: klasy, które są fundamentalne dla platformy Java (obejmujące klasy publiczne Biblioteki klas Java oraz klasy prywatne, które są niezbędne do działania tej biblioteki).
- klasy rozszerzeń: pakiety znajdujące się w katalogu rozszerzeń Java Runtime Environment lub JDK ,
jre/lib/ext/
- pakiety i biblioteki zdefiniowane przez użytkownika
Domyślnie dostępne są tylko pakiety standardowego interfejsu API JDK i pakiety rozszerzeń bez konieczności określania miejsca ich wyszukiwania. Ścieżka do wszystkich pakietów i bibliotek zdefiniowanych przez użytkownika musi być ustawiona w wierszu poleceń (lub w Manifeście powiązanym z plikiem Jar zawierającym klasy).
Ustawianie ścieżki do uruchamiania programów Java
Dostarczanie jako argument aplikacji
Załóżmy, że mamy pakiet o nazwie org.mypackage zawierający klasy:
- HelloWorld (klasa główna)
- Klasa wsparcia
- UtilClass
a pliki definiujące ten pakiet są fizycznie przechowywane w katalogu D:\myprogram (w systemie Windows ) lub /home/user/myprogram (w systemie Linux ).
Struktura plików wygląda następująco:
Microsoft Windows | Linuks |
---|---|
D:\mójprogram\ | ---> org\ | ---> mój pakiet\ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class |
/home/użytkownik/mójprogram/ | ---> org/ | ---> mój pakiet/ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class |
Kiedy wywołujemy Javę, podajemy nazwę aplikacji do uruchomienia: org.mypackage.HelloWorld. Jednak musimy również powiedzieć Javie, gdzie ma szukać plików i katalogów definiujących nasz pakiet. Aby uruchomić program, używamy następującego polecenia:
Microsoft Windows | Linuks |
---|---|
java -ścieżka klasy D:\myprogram org.mypackage.HelloWorld |
java -cp /home/user/myprogram org.mypackage.HelloWorld |
Gdzie:
-
java
to program uruchamiający środowisko wykonawcze Java , rodzaj narzędzia SDK (narzędzie wiersza polecenia, takie jak javac , javadoc lub apt ) - -classpath D:\myprogram ustawia ścieżkę do pakietów używanych w programie (w systemie Linux -cp /home/user/myprogram ) i
- org.mypackage.HelloWorld to nazwa klasy głównej
Ustawianie ścieżki przez zmienną środowiskową
Zmiennej środowiskowej o nazwie CLASSPATH
można alternatywnie użyć do ustawienia ścieżki klasy. W powyższym przykładzie moglibyśmy również użyć w systemie Windows:
D:\myprogram> set CLASSPATH = D:\myprogram D:\myprogram> java org.mypackage.HelloWorld
Zasadą jest, że opcja -classpath
użyta do uruchomienia aplikacji java zastępuje zmienną środowiskową CLASSPATH .
Jeśli żaden nie zostanie określony, bieżący katalog roboczy jest używany jako ścieżka klasy. Oznacza to, że gdy naszym katalogiem roboczym jest D:\myprogram\
(w systemie Linux /home/user/myprogram/
), nie musielibyśmy jawnie określać ścieżki klasy. Jednak podczas zastępowania zaleca się dołączenie bieżącego folderu „.”
do ścieżki klasy w przypadku, gdy wymagane jest załadowanie klas z bieżącego folderu.
To samo dotyczy nie tylko programu uruchamiającego java, ale także javac , kompilatora javy.
Ustawianie ścieżki pliku Jar
Jeśli program korzysta z biblioteki pomocniczej zawartej w pliku Jar o nazwie supportLib.jar , fizycznie zlokalizowanej w katalogu D:\myprogram\lib\ , a odpowiadająca jej fizyczna struktura plików to:
D:\mójprogram\ | ---> lib\ | ---> supportLib.jar | ---> org\ | --> mój pakiet\ | ---> HelloWorld.class ---> SupportClass.class ---> UtilClass.class
potrzebna jest następująca opcja wiersza poleceń :
java -ścieżka klasy D:\myprogram;D:\myprogram\lib\supportLib.jar org.mypackage.HelloWorld
lub alternatywnie:
D:\myprogram> set CLASSPATH = D:\myprogram;D:\myprogram\lib\supportLib.jar D:\myprogram> java org.mypackage.HelloWorld
Dodanie wszystkich plików JAR w katalogu
W Javie 6 i nowszych można dodać wszystkie pliki jar w określonym katalogu do ścieżki klasy, używając notacji wieloznacznej.
Przykład Windowsa:
D:\myprogram> java -classpath ".;c:\mylib\*" MojaAplikacja
Przykład Linuksa:
$ Java -classpath '.:/mylib/*' MojaAplikacja
Działa to zarówno w przypadku opcji -classpath,
jak i środowiskowych ścieżek klas.
Ustawianie ścieżki w pliku manifestu
Jeśli program został umieszczony w pliku Jar o nazwie helloWorld.jar , znajdującym się bezpośrednio w katalogu D:\myprogram , struktura katalogów wygląda następująco:
D:\mójprogram\ | ---> helloWorld.jar | ---> lib\ | ---> supportLib.jar
Plik manifestu zdefiniowany w helloWorld.jar ma następującą definicję:
Klasa główna : org.mypackage.HelloWorld Ścieżka klasy : lib/supportLib.jar
Plik manifestu powinien kończyć się znakiem nowej linii lub znakiem powrotu karetki.
Program uruchamia się za pomocą następującego polecenia:
java -jar D:\myprogram\helloWorld.jar [argumenty aplikacji]
Spowoduje to automatyczne uruchomienie elementu org.mypackage.HelloWorld określonego w klasie Main-Class z argumentami. Użytkownik nie może zastąpić tej nazwy klasy za pomocą wywołania java -jar
. Class-Path opisuje położenie pliku supportLib.jar względem położenia biblioteki helloWorld.jar . Nie jest obsługiwana ani bezwzględna ścieżka do pliku, która jest dozwolona w -classpath
w wierszu polecenia, ani ścieżki wewnętrzne jar. Oznacza to, że jeśli główny plik klasy jest zawarty w słoiku, org/mypackage/HelloWorld.class musi być prawidłową ścieżką do katalogu głównego w słoiku.
Wiele wpisów ścieżki klasy jest oddzielonych spacjami:
Ścieżka klasy : lib/supportLib.jar lib/supportLib2.jar
Uwagi dotyczące systemu operacyjnego
Będąc ściśle powiązanym z systemem plików, składnia Classpath wiersza poleceń zależy od systemu operacyjnego. Na przykład:
- we wszystkich systemach operacyjnych typu Unix (takich jak Linux i Mac OS X ) struktura katalogów ma składnię uniksową, z oddzielnymi ścieżkami do plików oddzielonymi dwukropkiem ( „:”).
- w systemie Windows struktura katalogów ma składnię systemu Windows, a każda ścieżka do pliku musi być oddzielona średnikiem ( „;”).
Nie dotyczy to sytuacji, gdy ścieżka klasy jest zdefiniowana w plikach manifestu , gdzie każda ścieżka pliku musi być oddzielona spacją („ ”), niezależnie od systemu operacyjnego.
Zobacz też
Linki zewnętrzne
- Uwaga wyjaśniająca, w jaki sposób znajdują się klasy Java, na stronie internetowej Oracle
- Specyfikacja sposobu ustawiania ścieżki klas w witrynie Oracle