Ś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:

  1. 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).
  2. klasy rozszerzeń: pakiety znajdujące się w katalogu rozszerzeń Java Runtime Environment lub JDK , jre/lib/ext/
  3. 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