ŚCIEŻKA KLASY: CLASSPATH to zmienna środowiskowa używana przez aplikację ClassLoader do lokalizowania i ładowania plików .class. CLASSPATH definiuje ścieżkę, aby znaleźć klasy innych firm i klasy zdefiniowane przez użytkownika, które nie są rozszerzeniami ani częścią platformy Java. Podczas ustawiania CLASSPATH uwzględnij wszystkie katalogi zawierające pliki .class i JAR.
Musisz ustawić CLASSPATH, jeśli:
topologie
- Musisz załadować klasę, której nie ma w bieżącym katalogu ani w żadnym podkatalogu.
- Musisz załadować klasę, która nie znajduje się w lokalizacji określonej przez mechanizm rozszerzeń.
CLASSPATH zależy od tego, co ustawisz CLASSPATH. CLASSPATH ma na końcu nazwę katalogu lub nazwę pliku. Poniższe punkty opisują, jaki powinien być koniec ścieżki CLASSPATH.
- Jeśli jest to plik JAR lub ZIP, plik zawiera pliki klas, a ścieżka CLASSPATH kończy się nazwą pliku ZIP lub JAR.
- Jeśli pliki klas są umieszczone w nienazwanym pakiecie, ścieżka CLASSPATH kończy się katalogiem zawierającym pliki klas.
- Jeśli pliki klas są umieszczone w nazwanym pakiecie, ścieżka CLASSPATH kończy się katalogiem zawierającym pakiet główny w pełnej nazwie pakietu, czyli pierwszym pakietem w pełnej nazwie pakietu.
Domyślną wartością CLASSPATH jest kropka (.). Oznacza to, że jest to jedyny przeszukiwany bieżący katalog. Domyślna wartość CLASSPATH zostaje zastąpiona w przypadku ustawienia zmiennej CLASSPATH lub użycia polecenia -classpath (w skrócie -cp). Jeśli chcesz uwzględnić bieżący katalog w ścieżce wyszukiwania, wstaw kropkę (.) w nowym ustawieniu.
Jeśli CLASSPATH znajdzie plik klasy, który znajduje się w bieżącym katalogu, wówczas załaduje klasę i użyje go, niezależnie od tej samej nazwy, jaką klasa znajduje się w innym katalogu, który również jest zawarty w CLASSPATH.
Jeśli chcesz ustawić wiele ścieżek klas, musisz oddzielić każdą ścieżkę klasy średnikiem (;).
Aplikacje innych firm (MySQL i Oracle) korzystające z JVM mogą modyfikować zmienną środowiskową CLASSPATH, aby uwzględnić używane przez nich biblioteki. Klasy mogą być przechowywane w katalogach lub plikach archiwalnych. Klasy platformy Java przechowywane są w pliku rt.jar.
Istnieją dwa sposoby ustawienia CLASSPATH: za pomocą wiersza poleceń lub poprzez ustawienie zmiennej środowiskowej.
Zobaczmy jak ustawić CLASSPATH bazy danych MySQL:
Krok 1: Kliknij przycisk Windows i wybierz Panel sterowania. Wybierz System.
próba złapania Java
Krok 2: Kliknij Zaawansowane ustawienia systemu .
Krok 3: Otworzy się okno dialogowe. Kliknij Zmienne środowiskowe.
Krok 4: Jeśli ścieżka CLASSPATH już istnieje w zmiennych systemowych, kliknij przycisk Edytuj, a następnie wstaw średnik (;) na końcu. Wklej ścieżkę pliku Java.jar złącza MySQL.
Jeśli ścieżka CLASSPATH nie istnieje w zmiennych systemowych, kliknij przycisk Nowy i wpisz nazwę zmiennej jako CLASSPATH i wartość zmiennej jako C:Program FilesJavajre1.8MySQL-Connector Java.jar;.;
Pamiętaj: Umieść ;.; na końcu CLASSPATH.
Różnica między PATH i CLASSPATH
ŚCIEŻKA | ŚCIEŻKA KLASY |
---|---|
PATH jest zmienną środowiskową. | CLASSPATH jest także zmienną środowiskową. |
Jest używany przez system operacyjny do wyszukiwania plików wykonywalnych (.exe). | Jest używany przez aplikację ClassLoader do lokalizowania pliku .class. |
Wymagane jest dołączenie katalogu zawierającego pliki .exe. | Wymagane jest uwzględnienie wszystkich katalogów zawierających pliki .class i JAR. |
Po ustawieniu zmiennej środowiskowej PATH nie można jej zastąpić. | Zmienną środowiskową CLASSPATH można zastąpić, używając opcji wiersza poleceń -cp lub -CLASSPATH zarówno do poleceń javac, jak i java. |
Jak ustawić CLASSPATH w systemie Windows za pomocą wiersza poleceń
Wpisz następujące polecenie w wierszu poleceń i naciśnij klawisz Enter.
set CLASSPATH=%CLASSPATH%;C:Program FilesJavajre1.8 t.jar;
W powyższym poleceniu Set jest wewnętrznym poleceniem DOS-u, które pozwala użytkownikowi na zmianę wartości zmiennej. CLASSPATH to nazwa zmiennej. Zmienna ujęta w znak procentu (%) jest istniejącą zmienną środowiskową. Średnik jest separatorem, a po (;) znajduje się ŚCIEŻKA pliku rt.jar.
ciąg.podciąg Java
Jak folder ext działa w Javie
Katalog ext działa trochę jak CLASSPATH. ext jest częścią mechanizmu ładowania klasy. Klasy dostępne w plikach JAR w katalogu ext są dostępne dla aplikacji Java.
Poniższa tabela przedstawia kluczową różnicę między mechanizmem CLASSPATH i mechanizmem rozszerzającym:
Charakterystyka | ŚCIEŻKA KLASY | Mechanizm przedłużający |
---|---|---|
Kolejność ładowania klas | CLASSPATH ładuje się po załadowaniu bootstrapu i rozszerzenia. | ext ładuje się po załadowaniu bootstrapu, ale przed załadowaniem CLASSPATH. |
Zakres | Jest to specyficzne dla aplikacji. Wszystkie środowiska JRE na hoście to zmienna środowiskowa CLASSPATH. | Wszystkie maszyny JVM działają w określonych katalogach JRE java.ext.dirs. |
Nazwa pakietu | Java.class.path służy do wyszukiwania katalogów i archiwów JAR zawierających pliki klas. | Java.ext.dirs służy do określenia, gdzie mechanizm rozszerzenia ładuje klasy. |
Specyfikacja | Jest on określony przez nazwę, łącznie z rozszerzeniem.jar i katalogiem zawierającym pliki .class. | Ładowane są wszystkie pliki JAR w określonych katalogach. |
Mechanizm pobierze wszystkie pliki .jar z katalogu rozszerzenia, nawet jeśli plik nie ma rozszerzenia .jar. Implementacja tego polega na tym, że jeśli można zmienić nazwę słoika umieszczonego w katalogu ścieżki klas, aby miał rozszerzenie inne niż .jar. Symbol wieloznaczny (*) nie odbiera go. Ta technika nie będzie działać z katalogiem rozszerzenia.
Rozumiemy proces wykonania na przykładzie.
A.java
public class A { public String toString() { return 'hello'; } }
B.java
public class B { public static void main(final String[] args) { System.out.println(new A()); } }
Skompiluj plik A.java. zarchiwizujemy skompilowany plik A.class w A.jar. Umieść ten plik JAR w innym katalogu niż skompilowany plik B.class.
Aby zademonstrować użycie ścieżki klasy, umieszczamy plik A.jar w katalogu C:JavaPrograms i uzyskujemy dostęp do tego pliku JAR za pomocą symbolu wieloznacznego (*), aby B mógł go użyć.
Odkryliśmy, że B może nadal załadować klasę A, mimo że usunęliśmy ją z bieżącego katalogu. W programie uruchamiającym Java jawnie szukano C:JavaProgram. Możliwe jest również załadowanie klasy bez jej obecności w tym samym katalogu i jawnej specyfikacji ścieżki klasy.
Często określa się to jako zaletę korzystania z mechanizmu rozszerzeń, ponieważ wszystkie aplikacje korzystające z tego środowiska JRE mogą widzieć te same klasy bez konieczności jawnego określania ich w ścieżce klas.
Co się stanie, jeśli zmienimy nazwę A.jar na A.backup w tym samym katalogu, do którego odnosi się CLASSPATH. Gdy zrobimy to samo, napotkamy błąd NoClassDefFoundError, ponieważ odwołanie do CLASSPATH nie ma rozszerzenia .jar.
konwencja nazewnictwa Java