Zauważyłem, że pliki JAR, WAR i EAR mają MANIFEST.MF
plik w META-INF
folderze.
Jaki jest pożytek z MANIFEST.MF
pliku? Jakie wszystko można określić w tym pliku?
java
manifest.mf
Anand
źródło
źródło
Odpowiedzi:
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ą:
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:
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."
źródło
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:
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
źródło