Saya perhatikan bahwa file JAR, WAR dan EAR memiliki MANIFEST.MF
file di bawah META-INF
folder tersebut.
Apa gunanya MANIFEST.MF
file tersebut? Apa semua hal yang dapat ditentukan dalam file ini?
java
manifest.mf
Anand
sumber
sumber
Jawaban:
Konten file Manifes dalam file JAR yang dibuat dengan Java Development Kit versi 1.0 adalah sebagai berikut.
Manifest-Version: 1.0
Semua entri adalah sebagai pasangan nama-nilai. Nama tajuk dipisahkan dari nilainya dengan titik dua. Manifes default menunjukkan bahwa itu sesuai dengan versi 1.0 dari spesifikasi manifes. Manifes juga dapat berisi informasi tentang file lain yang dikemas dalam arsip. Informasi file apa yang dicatat dalam manifes akan bergantung pada tujuan penggunaan file JAR. File manifes default tidak membuat asumsi tentang informasi apa yang harus direkam tentang file lain, jadi satu barisnya hanya berisi data tentang file itu sendiri. Header Manifes Tujuan Khusus
Bergantung pada peran yang diinginkan dari file JAR, manifes default mungkin harus dimodifikasi. Jika file JAR dibuat hanya untuk tujuan arsip, maka file MANIFEST.MF tidak ada gunanya. Sebagian besar penggunaan file JAR melampaui pengarsipan dan kompresi sederhana serta memerlukan informasi khusus untuk dimasukkan ke dalam file manifes. Diringkas di bawah ini adalah deskripsi singkat tentang header yang diperlukan untuk beberapa fungsi file JAR tujuan khusus
Aplikasi Dibundel sebagai File JAR: Jika sebuah aplikasi digabungkan dalam file JAR, Java Virtual Machine perlu diberi tahu apa titik masuk ke aplikasi tersebut. Titik masuk adalah semua kelas dengan metode public static void main (String [] args). Informasi ini disediakan di header Main-Class, yang memiliki bentuk umum:
Nama kelas nilai harus diganti dengan titik masuk aplikasi.
Ekstensi Unduhan: Ekstensi unduhan adalah file JAR yang direferensikan oleh file manifes file JAR lainnya. Dalam situasi tertentu, applet akan digabungkan dalam file JAR yang manifesnya mereferensikan file JAR (atau beberapa file JAR) yang akan berfungsi sebagai ekstensi untuk keperluan applet itu. Ekstensi dapat merujuk satu sama lain dengan cara yang sama. Ekstensi unduhan ditentukan di bidang tajuk Jalur Kelas dalam file manifes dari applet, aplikasi, atau ekstensi lain. Header Jalur Kelas mungkin terlihat seperti ini, misalnya:
Dengan header ini, class dalam file servlet.jar, infobus.jar, dan acme / beans.jar akan berfungsi sebagai ekstensi untuk keperluan applet atau aplikasi. URL di header Class-Path diberikan relatif terhadap URL file JAR dari applet atau aplikasi.
Package Sealing: Sebuah paket dalam file JAR dapat disegel secara opsional, yang berarti bahwa semua kelas yang ditentukan dalam paket itu harus diarsipkan dalam file JAR yang sama. Sebuah paket mungkin disegel untuk memastikan konsistensi versi di antara kelas-kelas dalam perangkat lunak Anda atau sebagai ukuran keamanan. Untuk menyegel paket, header Nama perlu ditambahkan untuk paket, diikuti oleh header Sealed, seperti ini:
Name: myCompany/myPackage/ Sealed: true
Nilai header Name adalah nama jalur relatif paket. Perhatikan bahwa ini diakhiri dengan '/' untuk membedakannya dari nama file. Semua header setelah header Nama, tanpa baris kosong apa pun yang mengganggu, berlaku untuk file atau paket yang ditentukan di header Name. Dalam contoh di atas, karena header Sealed muncul setelah header Name: myCompany / myPackage, tanpa garis kosong di antaranya, header Sealed akan diartikan sebagai penerapan (hanya) pada paket myCompany / myPackage.
Pembuatan Versi Paket: Spesifikasi Pembuatan Versi Paket menentukan beberapa header manifes untuk menyimpan informasi pembuatan versi. Satu set tajuk seperti itu dapat ditetapkan ke setiap paket. Header pembuatan versi akan muncul tepat di bawah header Name untuk paket. Contoh ini menunjukkan semua header pembuatan versi:
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."
sumber
Manifest.MF berisi informasi tentang file yang terdapat dalam file JAR.
Setiap kali file JAR dibuat, file manifest.mf default dibuat di dalam folder META-INF dan berisi entri default seperti ini:
Manifest-Version: 1.0 Created-By: 1.7.0_06 (Oracle Corporation)
Ini adalah entri sebagai pasangan "header: value". Yang pertama menentukan versi manifes dan yang kedua menentukan versi JDK yang digunakan untuk membuat file JAR.
Header Kelas-Utama: Ketika file JAR digunakan untuk menggabungkan aplikasi dalam sebuah paket, kita perlu menentukan kelas yang melayani titik masuk aplikasi. Kami memberikan informasi ini menggunakan header 'Kelas-Utama' dari file manifes,
Kelas-Utama: {nama kelas yang sepenuhnya memenuhi syarat}
Nilai 'Kelas-Utama' di sini adalah kelas yang memiliki metode utama. Setelah menentukan entri ini, kita dapat menjalankan file JAR untuk menjalankan aplikasi.
Class-Path header: Seringkali kita perlu mengakses file JAR lain dari kelas yang dikemas di dalam file JAR aplikasi. Ini dapat dilakukan dengan memberikan jalur yang sepenuhnya memenuhi syarat di file manifes menggunakan header 'Jalur Kelas',
Jalur Kelas: {jar1-name jar2-name directory-name / jar3-name}
Header ini dapat digunakan untuk menentukan file JAR eksternal di jaringan lokal yang sama dan bukan di dalam JAR saat ini.
Header terkait versi paket: Ketika file JAR digunakan untuk pembuatan versi paket, header berikut digunakan seperti yang ditentukan oleh spesifikasi bahasa Java:
Header terkait penyegelan paket:
Kami juga dapat menentukan apakah ada paket tertentu di dalam file JAR yang harus disegel yang berarti semua kelas yang ditentukan dalam paket itu harus diarsipkan dalam file JAR yang sama. Ini dapat ditentukan dengan bantuan header 'Sealed',
Nama: {package / some-package /} Sealed: true
Di sini, nama paket harus diakhiri dengan '/'.
Meningkatkan keamanan dengan file manifes:
Kita dapat menggunakan entri file manifes untuk memastikan keamanan aplikasi web atau applet yang dipaketkannya dengan atribut berbeda seperti 'Izin', 'Codebae', 'Nama-Aplikasi', 'Hanya Tepercaya' dan banyak lagi.
Folder META-INF:
Folder ini adalah tempat file manifes berada. Selain itu, dapat berisi lebih banyak file yang berisi data meta tentang aplikasi tersebut. Misalnya, dalam file JAR modul EJB, folder ini berisi deskriptor penerapan EJB untuk modul EJB bersama dengan file manifes untuk JAR tersebut. Selain itu, ini berisi file xml yang berisi pemetaan referensi EJB abstrak ke sumber daya container konkret dari server aplikasi tempat ia akan dijalankan.
Referensi:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
sumber