Wykorzystanie pliku MANIFEST.MF w Javie

Odpowiedzi:

88

Zawartość pliku Manifest w pliku JAR utworzonym w wersji 1.0 zestawu Java Development Kit jest następująca.

Manifest-Version: 1.0

Wszystkie wpisy są parami nazwa-wartość. Nazwa nagłówka jest oddzielona od jego wartości dwukropkiem. Domyślny manifest pokazuje, że jest zgodny z wersją 1.0 specyfikacji manifestu. Manifest może również zawierać informacje o innych plikach spakowanych w archiwum. Dokładne informacje o pliku zapisane w manifeście będą zależeć od zamierzonego zastosowania pliku JAR. Domyślny plik manifestu nie przyjmuje żadnych założeń dotyczących tego, jakie informacje powinien rejestrować o innych plikach, więc jego pojedynczy wiersz zawiera dane tylko o sobie. Nagłówki manifestu specjalnego przeznaczenia

W zależności od zamierzonej roli pliku JAR może zajść konieczność zmodyfikowania domyślnego manifestu. Jeśli plik JAR jest tworzony tylko w celu archiwizacji, plik MANIFEST.MF jest bezużyteczny. Większość zastosowań plików JAR wykracza poza zwykłą archiwizację i kompresję i wymaga umieszczenia w pliku manifestu specjalnych informacji. Poniżej podsumowano krótkie opisy nagłówków, które są wymagane przez niektóre funkcje plików JAR specjalnego przeznaczenia

Aplikacje spakowane jako pliki JAR: Jeśli aplikacja jest spakowana w pliku JAR, wirtualna maszyna języka Java musi zostać poinformowana o punkcie wejścia do aplikacji. Punktem wejścia jest dowolna klasa z publiczną statyczną metodą void main (String [] args). Te informacje znajdują się w nagłówku Main-Class, który ma postać ogólną:

Main-Class: classname

Wartość nazwa_klasy ma zostać zastąpiona punktem wejścia aplikacji.

Rozszerzenia pobierania: rozszerzenia pobierania to pliki JAR, do których odwołują się pliki manifestu innych plików JAR. W typowej sytuacji aplet zostanie umieszczony w pliku JAR, którego manifest odwołuje się do pliku JAR (lub kilku plików JAR), który będzie służył jako rozszerzenie na potrzeby tego apletu. Rozszerzenia mogą odnosić się do siebie w ten sam sposób. Rozszerzenia pobierania są określone w polu nagłówka Class-Path w pliku manifestu apletu, aplikacji lub innego rozszerzenia. Nagłówek Class-Path może wyglądać tak, na przykład:

Class-Path: servlet.jar infobus.jar acme/beans.jar

W przypadku tego nagłówka klasy w plikach servlet.jar, infobus.jar i acme / beans.jar będą służyć jako rozszerzenia dla celów apletu lub aplikacji. Adresy URL w nagłówku Class-Path są podawane względem adresu URL pliku JAR apletu lub aplikacji.

Pieczęć pakietu: pakiet w pliku JAR można opcjonalnie zapieczętować, co oznacza, że ​​wszystkie klasy zdefiniowane w tym pakiecie muszą być zarchiwizowane w tym samym pliku JAR. Pakiet może być zapieczętowany, aby zapewnić spójność wersji między klasami w twoim oprogramowaniu lub jako środek bezpieczeństwa. Aby zapieczętować paczkę, należy dodać nagłówek nazwy do paczki, a następnie nagłówek zapieczętowany, podobny do tego:

Name: myCompany/myPackage/
Sealed: true

Wartość nagłówka nazwy to względna nazwa ścieżki pakietu. Zauważ, że kończy się znakiem „/”, aby odróżnić go od nazwy pliku. Wszelkie nagłówki po nagłówku nazwy, bez żadnych pośrednich pustych wierszy, dotyczą pliku lub pakietu określonego w nagłówku nazwy. W powyższym przykładzie, ponieważ nagłówek Sealed występuje po nagłówku Name: myCompany / myPackage, bez pustych wierszy między nimi, nagłówek Sealed zostanie zinterpretowany jako mający zastosowanie (tylko) do pakietu myCompany / myPackage.

Przechowywanie wersji pakietów: specyfikacja wersji pakietów definiuje kilka nagłówków manifestu, które mają przechowywać informacje o wersji. Do każdego pakietu można przypisać jeden zestaw takich nagłówków. Nagłówki wersjonowania powinny pojawić się 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."
Szczery
źródło
36
Proszę nie kopiować czyjegoś dzieła. Powinieneś dodać link do strony internetowej. docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
Damian Leszczyński - Vash
59
To nie jest kopia, a raczej podsumowanie ... 5 stron.
Frank,
65
Możesz nazwać to podsumowaniem. Zdania zostały skopiowane, bez żadnego dodatkowego wniosku czy punktu. Myślę, że powinieneś szanować czyjąś pracę i dodawać linki i cytaty.
Damian Leszczyński - Vash
19

Manifest.MF zawiera informacje o plikach zawartych w pliku JAR.

Za każdym razem, gdy tworzony jest plik JAR, w folderze META-INF tworzony jest domyślny plik manifest.mf, który zawiera domyślne wpisy, takie jak:

Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)

Są to wpisy w postaci par „nagłówek: wartość”. Pierwsza określa wersję manifestu, a druga wersję JDK, za pomocą której tworzony jest plik JAR.

Nagłówek klasy głównej: Kiedy plik JAR jest używany do umieszczania aplikacji w pakiecie, musimy określić klasę obsługującą punkt wejścia aplikacji. Informacje te podajemy za pomocą nagłówka „Main-Class” pliku manifestu,

Klasa główna: {w pełni kwalifikowana nazwa klasy}

Wartość „Main-Class” jest tutaj klasą mającą metodę główną. Po określeniu tego wpisu możemy uruchomić plik JAR, aby uruchomić aplikację.

Nagłówek Class-Path: W większości przypadków musimy uzyskać dostęp do innych plików JAR z klas spakowanych w pliku JAR aplikacji. Można to zrobić, podając ich w pełni kwalifikowane ścieżki w pliku manifestu za pomocą nagłówka „Class-Path”,

Class-Path: {nazwa-jar1 nazwa-jar2 nazwa-katalogu / nazwa-jar3}

Ten nagłówek może służyć do określania zewnętrznych plików JAR w tej samej sieci lokalnej, a nie w bieżącym pliku JAR.

Nagłówki związane z wersją pakietu: Gdy plik JAR jest używany do przechowywania wersji pakietów, używane są następujące nagłówki zgodnie ze specyfikacją języka Java:

Headers in a manifest
Header                  | Definition
-------------------------------------------------------------------
Name                    | The name of the specification.
Specification-Title     | The title of the specification.
Specification-Version   | The version of the specification.
Specification-Vendor    | The vendor of the specification.
Implementation-Title    | The title of the implementation.
Implementation-Version  | The build number of the implementation.
Implementation-Vendor   | The vendor of the implementation.

Nagłówki dotyczące plombowania opakowań:

Możemy również określić, czy jakiekolwiek konkretne pakiety w pliku JAR mają być zapieczętowane, co oznacza, że ​​wszystkie klasy zdefiniowane w tym pakiecie muszą być archiwizowane w tym samym pliku JAR. Można to określić za pomocą nagłówka „Sealed”,

Nazwa: {pakiet / jakiś-pakiet /} Zapieczętowana: prawda

Tutaj nazwa pakietu musi kończyć się znakiem „/”.

Zwiększenie bezpieczeństwa dzięki plikom manifestu:

Możemy używać wpisów plików manifestu, aby zapewnić bezpieczeństwo aplikacji internetowej lub pakowanych przez nią apletów z różnymi atrybutami, takimi jak „Uprawnienia”, „Codebae”, „Nazwa aplikacji”, „Tylko zaufane” i wiele innych.

Folder META-INF:

W tym folderze znajduje się plik manifestu. Może również zawierać więcej plików zawierających metadane dotyczące aplikacji. Na przykład w pliku JAR modułu EJB ten folder zawiera deskryptor wdrażania EJB dla modułu EJB wraz z plikiem manifestu dla JAR. Zawiera również plik xml zawierający odwzorowanie abstrakcyjnych odwołań EJB do konkretnych zasobów kontenera serwera aplikacji, na którym będzie uruchamiany.

Źródła:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

jordom
źródło