JAR (format pliku)

Archiwum Javy
KDE JAR file icon
Ikona pliku KDE JAR
Rozszerzenie nazwy pliku
.słoik
Rodzaj mediów internetowych
aplikacja/archiwum java
Jednolity identyfikator typu (UTI) com.sun.java-archive
magiczny numer 50 4b 03 04 ASCII:PK\x03\x04
Opracowany przez Netscape , Sun Microsystems , Oracle Corporation
Typ formatu Archiwum plików , kompresja danych
Przedłużony od zamek błyskawiczny

Plik JAR („archiwum Java”) to format pliku pakietu , zwykle używany do agregowania wielu plików klas Java oraz powiązanych metadanych i zasobów (tekst, obrazy itp.) w jeden plik do dystrybucji.

Pliki JAR to pliki archiwów zawierające plik manifestu specyficzny dla języka Java . Są one zbudowane w formacie ZIP i zazwyczaj mają rozszerzenie pliku .jar .

Projekt

Plik JAR umożliwia środowiskom wykonawczym Java wydajne wdrażanie całej aplikacji, w tym jej klas i powiązanych z nimi zasobów, w jednym żądaniu. Elementy pliku JAR mogą być skompresowane, co skraca czas pobierania.

Plik JAR może zawierać plik manifestu, który znajduje się w META-INF/MANIFEST.MF . Wpisy w pliku manifestu opisują sposób korzystania z pliku JAR. Na przykład ścieżki klasy może służyć do określenia innych plików JAR, które mają zostać załadowane wraz z plikiem JAR.

Ekstrakcja

Zawartość pliku można rozpakować za pomocą dowolnego oprogramowania do rozpakowywania archiwów obsługującego format ZIP lub narzędzia wiersza poleceń jar dostarczonego z zestawu Java Development Kit.

Bezpieczeństwo

Programiści mogą cyfrowo podpisywać pliki JAR. W takim przypadku informacje o podpisie stają się częścią osadzonego pliku manifestu. Sam plik JAR nie jest podpisany, ale zamiast tego każdy plik w archiwum jest wymieniony wraz z jego sumą kontrolną; to te sumy kontrolne są podpisane. Wiele podmiotów może podpisywać plik JAR, zmieniając sam plik JAR przy każdym podpisaniu, chociaż same podpisane pliki zachowują ważność. Gdy środowisko wykonawcze Java ładuje podpisane pliki JAR, może sprawdzić poprawność podpisów i odmówić załadowania klas, które nie pasują do podpisu. Może również obsługiwać „zapieczętowane” pakiety, w których Classloader pozwoli tylko na ładowanie klas Java do tego samego pakietu, jeśli wszystkie są podpisane przez te same jednostki. Zapobiega to wstawianiu złośliwego kodu do istniejącego pakietu, a tym samym uzyskiwaniu dostępu do klas i danych o zasięgu pakietu.

Zawartość plików JAR może być zaciemniona , aby utrudnić inżynierię wsteczną .

Wykonywalne pliki JAR

Wykonywalny program Java może być spakowany w pliku JAR wraz z wszelkimi bibliotekami używanymi przez program. Wykonywalne pliki JAR mają manifest określający punktu wejścia z Main-Class: myPrograms.MyClass i wyraźną ścieżkę klasy (a argument -cp jest ignorowany). Niektóre systemy operacyjne mogą uruchamiać je bezpośrednio po kliknięciu. Typowe wywołanie to java -jar foo.jar z wiersza poleceń.

Natywne programy uruchamiające można tworzyć na większości platform. Na przykład użytkownicy systemu Microsoft Windows, którzy preferują pliki Windows EXE , mogą używać narzędzi, takich jak JSmooth , Launch4J, WinRun4J lub Nullsoft Scriptable Install System, aby zawijać pojedyncze pliki JAR w pliki wykonywalne.

Oczywisty

Plik manifestu to plik metadanych zawarty w pliku JAR. Definiuje dane dotyczące rozszerzeń i pakietów. Zawiera pary nazwa-wartość zorganizowane w sekcje. Jeśli plik JAR ma być używany jako plik wykonywalny, plik manifestu określa główną klasę aplikacji. Plik manifestu nosi nazwę MANIFEST.MF . Katalog manifestu musi być pierwszym wpisem skompresowanego archiwum.

Specyfikacje

Manifest pojawia się w lokalizacji kanonicznej META-INF/MANIFEST.MF . W archiwum może znajdować się tylko jeden plik manifestu i musi on znajdować się w tej lokalizacji.

Zawartość pliku manifestu w pliku JAR utworzonym za pomocą wersji 1.0 pakietu Java Development Kit jest następująca.

Wersja manifestu: 1.0

Nazwa jest oddzielona od wartości dwukropkiem. Domyślny manifest pokazuje, że jest zgodny z wersją 1.0 specyfikacji manifestu.

Manifest może zawierać informacje o innych plikach spakowanych w archiwum. Zawartość manifestu zależy od zamierzonego wykorzystania pliku JAR. Domyślny plik manifestu nie przyjmuje żadnych założeń dotyczących tego, jakie informacje powinien zapisywać o innych plikach, więc jego pojedyncza linia zawiera dane tylko o sobie. Powinien być zakodowany w UTF-8.

Nagłówki manifestu specjalnego przeznaczenia

Pliki JAR utworzone wyłącznie w celu archiwizacji nie wykorzystują pliku MANIFEST.MF .

Większość zastosowań plików JAR wykracza poza prostą archiwizację i kompresję i wymaga specjalnych informacji w pliku manifestu.

Cechy

Manifest umożliwia programistom zdefiniowanie kilku przydatnych funkcji dla ich słoików. Właściwości są określane w parach klucz-wartość.

Aplikacje

Jeśli aplikacja jest zawarta w pliku JAR, wirtualna maszyna Java musi znać punkt wejścia aplikacji. Punkt wejścia to dowolna klasa z publiczną metodą static void main(String[] args) . Informacje te są podane w nagłówku manifestu Main-Class, który ma ogólną postać:

Klasa główna: com.example.MyClassName

W tym przykładzie funkcja com.example.MyClassName.main() jest wykonywana podczas uruchamiania aplikacji.

Zapieczętowanie opakowania

Opcjonalnie pakiet w pliku JAR można zapieczętować, co oznacza, że ​​wszystkie klasy zdefiniowane w tym pakiecie są archiwizowane w tym samym pliku JAR. Pakiet może zostać zapieczętowany, aby zapewnić spójność wersji między klasami w oprogramowaniu lub jako środek bezpieczeństwa.

Aby zapieczętować paczkę, musi pojawić się wpis Nazwa, a następnie nagłówek Zapieczętowany, na przykład:

 
  Nazwa  :  myCompany/myPackage/  Sealed  :  true 

Wartością nagłówka Name jest względna nazwa ścieżki pakietu. Zauważ, że kończy się znakiem „/”, aby odróżnić go od nazwy pliku. Wszystkie nagłówki następujące po nagłówku Nazwa, bez żadnych pustych linii pośrednich, odnoszą się do pliku lub pakietu określonego w nagłówku Nazwa. W powyższym przykładzie, ponieważ Sealed występuje po nagłówku Name: myCompany/myPackage bez pośrednich pustych linii, nagłówek Sealed ma zastosowanie (tylko) do pakietu myCompany/myPackage .

Funkcja zapieczętowanych pakietów jest przestarzała przez system modułów platformy Java wprowadzony w Javie 9, w którym moduły nie mogą dzielić pakietów.

Wersjonowanie pakietów

Kilka nagłówków manifestu zawiera informacje o wersji. Do każdego pakietu można przypisać jeden zestaw nagłówków. Nagłówki wersji są wyświetlane bezpośrednio pod nagłówkiem nazwy pakietu. Ten przykład pokazuje wszystkie nagłówki wersjonowania:

 
 
 
 
 
 
  Nazwa  :  java/util/  Tytuł specyfikacji  :  „Java Utility Classes”  Wersja specyfikacji  :  „1.2”  Dostawca specyfikacji  :  „Sun Microsystems, Inc.”.  Tytuł implementacji  :  „java.util”  Wersja implementacji  :  „build57”  Dostawca implementacji  :  „Sun Microsystems, Inc.” 

Wiele wydań

Słoik można opcjonalnie oznaczyć jako słoik o wielu wydaniach. Korzystanie z funkcji wielu wydań umożliwia programistom bibliotek ładowanie różnych kodów w zależności od wersji środowiska wykonawczego Java. To z kolei pozwala programistom na wykorzystanie nowych funkcji bez poświęcania kompatybilności.

Słoik z wieloma wydaniami jest włączany za pomocą następującej deklaracji w manifeście:

  Wielokrotne wydanie  :  prawda 

Zależności

MANIFEST.MF może służyć do określenia wszystkich klas , które muszą zostać załadowane, aby aplikacja mogła działać.

Zauważ, że wpisy Class-Path są oddzielone spacjami, a nie separatorem ścieżki systemowej:

  Ścieżka klasy  :  . pkg1.jar ścieżka/do/pkg2.jar  

Obsługa Apache Ant Zip/JAR

Narzędzie do budowania Apache Ant ma własny pakiet do odczytu i zapisu archiwów Zip i JAR, w tym obsługę rozszerzeń systemu plików Unix . Pakiet org.apache.tools.zip jest udostępniany na Apache Software Foundation i jest przeznaczony do użytku poza Ant.

Powiązane formaty

Kilka powiązanych formatów plików opiera się na formacie JAR:

  • WAR (archiwum aplikacji internetowych), także archiwa Java, przechowują pliki XML , klasy Java, JavaServer Pages i inne obiekty dla aplikacji internetowych.
  • RAR (archiwum adaptera zasobów) (nie mylić z formatem pliku RAR ), także archiwa Java, przechowują pliki XML, klasy Java i inne obiekty dla aplikacji J2EE Connector Architecture (JCA).
  • EAR (archiwum korporacyjne) zapewniają złożone archiwa Java, które łączą pliki XML, klasy Java i inne obiekty, w tym pliki archiwów Java JAR, WAR i RAR dla aplikacji korporacyjnych.
  • SAR (archiwum serwisowe) jest podobne do EAR. Udostępnia service.xml i towarzyszące mu pliki JAR.
  • APK (pakiet aplikacji na Androida), wariant formatu archiwum Java, jest używany w aplikacjach na Androida .
  • AAR (archiwum Androida) służy do dystrybucji bibliotek Androida , zwykle za pośrednictwem Maven .
  • PAR (archiwum planu) — obsługiwane przez serwer aplikacji Eclipse Virgo OSGi , umożliwia wdrażanie wielu pakietów aplikacji OSGi jako jednego archiwum i zapewnia izolację od innych aplikacji opartych na PAR wdrożonych na tym samym serwerze.
  • KAR (Archiwum Karaf) — obsługiwane przez serwer aplikacji Apache Karaf OSGi, umożliwia wdrażanie wielopakietowych, wielofunkcyjnych aplikacji OSGi.

Zobacz też

Linki zewnętrzne