logo

Jak ustawić CLASSPATH w Javie

Ś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
Jak ustawić CLASSPATH w Javie

Krok 2: Kliknij Zaawansowane ustawienia systemu .

Jak ustawić CLASSPATH w Javie

Krok 3: Otworzy się okno dialogowe. Kliknij Zmienne środowiskowe.

Jak ustawić CLASSPATH w Javie

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.

Jak ustawić CLASSPATH w Javie

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