Co to jest format pliku JAR?
Pliki z rozszerzeniem .jar to archiwa ZIP używane przez platformę Java do łączenia skompilowanych plików .class, metadanych i zasobów - takich jak obrazy, pliki tekstowe i dane konfiguracyjne - w jeden przenośny pakiet. Format ten został wprowadzony wraz z JDK 1.1 i pozostaje podstawową jednostką dystrybucji bibliotek oraz aplikacji Java.
Plik .jar może działać jako samodzielny plik wykonywalny, gdy jego plik META-INF/MANIFEST.MF określa wpis Main-Class. Po uruchomieniu za pomocą polecenia java -jar file.jar, maszyna wirtualna JVM odczytuje ten atrybut i uruchamia wyznaczoną klasę, co pozwala programistom dostarczać kompletną aplikację jako pojedynczy plik działający na dowolnym systemie z zainstalowanym kompatybilnym środowiskiem uruchomieniowym. Każdy pojedynczy wpis wewnątrz archiwum może być również kompresowany niezależnie przy użyciu algorytmu DEFLATE, co zmniejsza rozmiar pakietu, zachowując jednocześnie szybki, losowy dostęp do poszczególnych plików.
Wśród metadanych przenoszonych przez .jar, najważniejszy jest plik META-INF/MANIFEST.MF: definiuje on sposób użycia pakietu, wymienia zależności ścieżki klas (classpath) poprzez Class-Path i może zawierać atrybuty bezpieczeństwa. Podpisy cyfrowe są przechowywane jako oddzielne pliki .SF oraz .DSA/.RSA wewnątrz META-INF/, a nie w samym manifeście. Java 9 wprowadziła dwie kolejne funkcje: Multi-Release JARs umieszczają nadpisania klas specyficzne dla wersji w META-INF/versions/N/, a modularne pliki JAR zawierają plik module-info.class w katalogu głównym archiwum.
Aby przeglądać lub wypakować zawartość pliku .jar, możesz użyć dowolnego standardowego narzędzia do dekompresji ZIP i wykonać te same czynności, co w przypadku zwykłego archiwum - zmiana nazwy na .zip zadziała równie dobrze. Możesz także użyć polecenia jar dołączonego do JDK:
- Lista zawartości:
jar -tf file.jar - Wypakowanie:
jar -xf file.jar - Uruchomienie (jeśli wykonywalny):
java -jar file.jar
Powiązane formaty archiwów serwerowych obejmują pliki .war dla aplikacji internetowych oraz .ear dla aplikacji korporacyjnych, oba oparte na tej samej strukturze ZIP.
Bezpieczeństwo
RYZYKO: MEDIUMUruchamialny plik JAR to prawdziwy program: przy zainstalowanej Javie polecenie „java -jar” wykonuje dowolny zawarty w nim kod z uprawnieniami użytkownika - zatem nieznany plik JAR może zawierać złośliwe oprogramowanie (Java RAT i trojany to znana rodzina zagrożeń). Traktuj pobrany plik JAR jak każdy plik .exe: uruchamiaj tylko te z zaufanego źródła i uważaj na niechciane załączniki .jar. Samo sprawdzenie go jako ZIP (7-Zip) jest bezpieczne; ryzykiem jest jego uruchomienie. Plik JAR może być podpisany cyfrowo, ale podpis potwierdza jedynie pochodzenie, a nie bezpieczeństwo.
Szczegóły formatu
w pigułceProgramy otwierające pliki JAR
Szczegóły techniczne
specyfikacja| Format kontenera | Archiwum ZIP - współdzieli magiczne bajty `PK` (`50 4B 03 04`) pod offsetem 0 ze wszystkimi standardowymi plikami ZIP |
| Typ MIME | `application/java-archive` |
| Wymagany plik wewnętrzny | `META-INF/MANIFEST.MF` - musi być obecny; kontroluje metadane, ścieżkę klas i zachowanie wykonywalne |
| Wyzwalacz wykonywalnego JAR | Atrybut `Main-Class` w `MANIFEST.MF`; uruchamiany za pomocą `java -jar file.jar` |
| Format kodu bajtowego | Skompilowane pliki `.class` zawierające kod bajtowy JVM - niezależne od platformy, nie jest to natywny kod maszynowy |
| Kompresja poszczególnych wpisów | Algorytm DEFLATE (taki sam jak w ZIP); poszczególne wpisy mogą być również przechowywane bez kompresji dla szybszego dostępu losowego |
| Podpisy cyfrowe | Plik podpisu `.SF` sparowany z plikiem klucza `.DSA` lub `.RSA`, oba przechowywane wewnątrz `META-INF/` |
| Deklaracja ścieżki klas | Atrybut manifestu `Class-Path` wymienia oddzielone spacjami zależne pliki JAR do rozstrzygnięcia w czasie wykonywania |
| Multi-Release JAR (MR-JAR) | Java 9+; nadpisania klas specyficzne dla wersji umieszczone w `META-INF/versions/N/`, aby nowsze maszyny JVM wybierały właściwy kod bajtowy |
| Deskryptor modułu (JPMS) | Modularny JAR zawiera `module-info.class` w katalogu głównym archiwum, co umożliwia korzystanie z systemu modułów Java 9+ |
| Uszczelnianie pakietów | `Sealed: true` w manifeście zapobiega wstrzykiwaniu klas do tego samego pakietu przez inne pliki JAR w czasie wykonywania |
| Uber/Fat JAR | Samodzielny wariant wdrożeniowy, który zawiera wszystkie zależne pliki JAR; wymaga niestandardowego programu ładującego klasy, takiego jak Spring Boot Loader |
| Wydano | 1996-1997 (JDK 1.1) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | docs.oracle.com |
Konwersje JAR
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki JAR.