JAR (format pliku) - JAR (file format)
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 |
Rodzaj formatu | Archiwum plików , kompresja danych |
Rozszerzony z | zamek błyskawiczny |
JAR ( J ava AR szczypiorek) to pakiet format zazwyczaj używany do kruszywa wielu plików klas Java i powiązane metadane i zasoby (tekst, obrazy, etc.) w jednym pliku do dystrybucji.
Pliki JAR to pliki archiwum zawierające plik manifestu specyficzny dla języka Java . Są one zbudowane w formacie ZIP i zazwyczaj mają .jar
rozszerzenie pliku .
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 ramach jednego żądania. Elementy pliku JAR mogą być skompresowane, co skraca czas pobierania.
Plik JAR może zawierać plik manifestu, który znajduje się pod adresem META-INF/MANIFEST.MF
. Wpisy w pliku manifestu opisują sposób korzystania z pliku JAR. Na przykład wpis Classpath może służyć do określenia innych plików JAR do załadowania za pomocą JAR.
Ekstrakcja
Zawartość pliku można wyodrębnić za pomocą dowolnego standardowego oprogramowania do kompresji lub jar
narzędzia wiersza poleceń: „ -xf foo.
”.
Bezpieczeństwo
Deweloperzy mogą cyfrowo podpisywać pliki JAR. W takim przypadku informacje o podpisie stają się częścią osadzonego pliku manifestu. Sam JAR nie jest podpisany, ale zamiast tego każdy plik w archiwum jest wymieniony wraz z jego sumą kontrolną; to właśnie te sumy kontrolne są podpisywane. Wiele jednostek może podpisywać plik JAR, zmieniając sam plik JAR przy każdym podpisaniu, chociaż same podpisane pliki pozostają ważne. Gdy środowisko wykonawcze Java ładuje podpisane pliki JAR, może sprawdzić poprawność podpisów i odmówić załadowania klas niezgodnych z podpisem. Może również obsługiwać „zapieczętowane” pakiety, w których Classloader zezwala 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 zakresie pakietu.
Zawartość plików JAR może być zaciemniona, aby utrudnić inżynierię wsteczną .
Wykonywalne pliki JAR
Wykonywalny program Java można spakować w pliku JAR wraz z dowolnymi bibliotekami, z których korzysta program. Wykonywalne pliki JAR mają manifest określający klasę punktu wejścia z Main-Class: myPrograms.MyClass
jawną ścieżką klasy (a argument -cp jest ignorowany). Niektóre systemy operacyjne mogą je uruchamiać bezpośrednio po kliknięciu. Typowe wywołanie odbywa się 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 wolą mieć pliki Windows EXE , mogą używać narzędzi takich jak JSmooth , Launch4J, WinRun4J lub Nullsoft Scriptable Install System do pakowania pojedynczych plików 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
W manifeście pojawia się w kanonicznym lokalizacji 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ą pakietu Java Development Kit w wersji 1.0 jest następująca.
Manifest-Version: 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. Treść manifestu zależy od zamierzonego zastosowania pliku JAR. Domyślny plik manifestu nie określa, jakie informacje powinien rejestrować o innych plikach, więc jego pojedynczy wiersz 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 korzystają z MANIFEST.MF
pliku.
Większość zastosowań plików JAR wykracza poza prostą archiwizację i kompresję i wymaga specjalnych informacji w pliku manifestu.
funkcje
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 Javy musi znać punkt wejścia aplikacji. Punktem wejścia jest dowolna klasa z public static void main(String[] args)
metodą. Te informacje znajdują się w nagłówku manifestu Main-Class, który ma ogólną postać:
Main-Class: com.example.MyClassName
W tym przykładzie jest com.example.MyClassName.main()
wykonywany podczas uruchamiania aplikacji.
Uszczelnianie opakowania
Opcjonalnie pakiet w pliku JAR może być zapieczętowany, co oznacza, że wszystkie klasy zdefiniowane w tym pakiecie są archiwizowane w tym samym pliku JAR. Pakiet może być zapieczętowany, aby zapewnić spójność wersji między klasami oprogramowania lub jako środek bezpieczeństwa.
Aby zapieczętować paczkę, musi pojawić się wpis Nazwa, a następnie nagłówek Zapieczętowany, taki jak:
Name: myCompany/myPackage/
Sealed: true
Wartość nagłówka Name to względna ścieżka dostępu do pakietu. Zauważ, że kończy się znakiem „/”, aby odróżnić go od nazwy pliku. Wszelkie nagłówki następujące po nagłówku Nazwa, bez żadnych pośrednich pustych wierszy, odnoszą się do pliku lub pakietu określonego w nagłówku Nazwa. W powyższym przykładzie, ponieważ Sealed
nagłówek występuje po Name: myCompany/myPackage
nagłówku bez pośrednich pustych linii, Sealed
nagłówek dotyczy (tylko) pakietu myCompany/myPackage
.
Funkcja zapieczętowanych pakietów jest przestarzała przez wprowadzony w Javie 9 system Java Platform Module System, 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 Nazwa pakietu. Ten przykład pokazuje wszystkie nagłówki wersji:
Name: java/util/
Specification-Title: "Java Utility Classes"
Specification-Version: "1.2"
Specification-Vendor: "Sun Microsystems, Inc.".
Implementation-Title: "java.util"
Implementation-Version: "build57"
Implementation-Vendor: "Sun Microsystems, Inc."
Wiele wersji
Słoik można opcjonalnie oznaczyć jako słoik wielokrotnego użytku. Korzystanie z funkcji wielu wydań umożliwia twórcom bibliotek ładowanie różnych kodów w zależności od wersji środowiska wykonawczego Java. To z kolei umożliwia programistom korzystanie z nowych funkcji bez poświęcania kompatybilności.
Plik jar o wielu wydaniach jest włączany za pomocą następującej deklaracji w manifeście:
Multi-Release: true
Zależności
MANIFEST.MF
Plik może być używany do określenia wszystkich klas, które muszą zostać załadowane do aplikacji, aby móc uruchomić.
Zauważ, że wpisy Class-Path są rozdzielone spacjami, a nie ogranicznikiem ścieżki systemowej:
Class-Path: . pkg1.jar path/to/pkg2.jar
Obsługa Apache Ant Zip/JAR
Apache Ant narzędzie build ma swój własny pakiet do odczytu i zapisu ZIP i archiwów JAR, w tym wsparcie dla uniksowych systemów plików rozszerzeń. Pakiet org.apache.tools.zip jest udostępniany na licencji Apache Software Foundation i jest przeznaczony do użytku poza programem Ant.
Powiązane formaty
Kilka powiązanych formatów plików opiera się na formacie JAR:
- Pliki WAR (archiwum aplikacji internetowych), również archiwa Java, przechowują pliki XML , klasy Java, strony JavaServer 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).
- Pliki 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 usług) jest podobny do EAR. Udostępnia plik service.xml i towarzyszące mu pliki JAR.
- APK (pakiet aplikacji na Androida), wariant formatu archiwum Java, jest używany do aplikacji na Androida .
- AAR (archiwum Androida) służy do dystrybucji bibliotek Androida , zazwyczaj za pośrednictwem Maven .
- PAR (archiwum planu) - obsługiwany przez serwer aplikacji Eclipse Virgo OSGi , umożliwia wdrażanie wielopakowych aplikacji OSGi jako pojedynczego archiwum i zapewnia izolację od innych aplikacji opartych na PAR, rozmieszczonych na tym samym serwerze.
- KAR (archiwum Karaf) - obsługiwane przez serwer aplikacji Apache Karaf OSGi, umożliwia wdrażanie wielopakowych, wielofunkcjonalnych aplikacji OSGi.