JAR, WAR ve EAR dosyalarının klasörün MANIFEST.MF
altında bir dosya olduğunu fark ettim META-INF
.
MANIFEST.MF
Dosyanın kullanımı nedir ? Bu dosyada her şey ne belirtilebilir?
JAR, WAR ve EAR dosyalarının klasörün MANIFEST.MF
altında bir dosya olduğunu fark ettim META-INF
.
MANIFEST.MF
Dosyanın kullanımı nedir ? Bu dosyada her şey ne belirtilebilir?
Yanıtlar:
Java Geliştirme Kiti'nin 1.0 sürümü ile oluşturulan bir JAR dosyasındaki Manifest dosyasının içeriği aşağıdaki gibidir.
Manifest-Version: 1.0
Tüm girişler ad-değer çiftleridir. Bir başlığın adı, değerinden iki nokta üst üste ile ayrılır. Varsayılan bildirim, bildirim belirtiminin 1.0 sürümüne uygun olduğunu gösterir. Manifest, arşivde paketlenmiş diğer dosyalar hakkında da bilgi içerebilir. Bildirimde tam olarak hangi dosya bilgilerinin kaydedileceği, JAR dosyasının kullanım amacına bağlı olacaktır. Varsayılan bildirim dosyası, diğer dosyalar hakkında hangi bilgileri kaydetmesi gerektiği konusunda hiçbir varsayımda bulunmaz, bu nedenle tek satırında yalnızca kendisiyle ilgili veriler bulunur. Özel Amaçlı Manifest Başlıkları
JAR dosyasının amaçlanan rolüne bağlı olarak, varsayılan bildirimin değiştirilmesi gerekebilir. JAR dosyası yalnızca arşivleme amacıyla oluşturulmuşsa, MANIFEST.MF dosyasının amacı yoktur. JAR dosyalarının çoğu kullanımı, basit arşivleme ve sıkıştırmanın ötesine geçer ve manifest dosyasında özel bilgilerin olmasını gerektirir. Aşağıda, bazı özel amaçlı JAR dosyası işlevleri için gerekli olan başlıkların kısa açıklamaları özetlenmiştir.
JAR Dosyaları Olarak Paketlenmiş Uygulamalar: Bir uygulama bir JAR dosyasında paketlenmişse, Java Sanal Makinesi'ne uygulamanın giriş noktasının ne olduğu söylenmelidir. Giriş noktası, genel statik void main (String [] args) yöntemine sahip herhangi bir sınıftır. Bu bilgiler, genel biçime sahip Ana Sınıf başlığında sağlanır:
Main-Class: classname
Sınıf adı değeri, uygulamanın giriş noktasıyla değiştirilmelidir.
İndirme Uzantıları: İndirme uzantıları, diğer JAR dosyalarının manifest dosyaları tarafından referans verilen JAR dosyalarıdır. Tipik bir durumda, bir uygulama, manifestosu bir JAR dosyasına (veya birkaç JAR dosyasına) başvuran ve bu uygulamanın amaçları için bir uzantı görevi görecek olan bir JAR dosyasında paketlenecektir. Uzantılar aynı şekilde birbirine referans verebilir. İndirme uzantıları, bir uygulamanın, uygulamanın veya başka bir uzantının manifest dosyasındaki Class-Path başlık alanında belirtilir. Bir Class-Path başlığı şöyle görünebilir, örneğin:
Class-Path: servlet.jar infobus.jar acme/beans.jar
Bu başlık ile, servlet.jar, infobus.jar ve acme /bean.jar dosyalarındaki sınıflar, uygulamanın veya uygulamanın amaçlarına yönelik uzantılar olarak hizmet edecektir. Class-Path başlığındaki URL'ler, uygulamanın veya uygulamanın JAR dosyasının URL'sine göre verilmiştir.
Paket Mühürleme: Bir JAR dosyasındaki bir paket isteğe bağlı olarak mühürlenebilir, yani bu pakette tanımlanan tüm sınıfların aynı JAR dosyasında arşivlenmesi gerekir. Yazılımınızdaki sınıflar arasında sürüm tutarlılığını sağlamak için veya bir güvenlik önlemi olarak bir paket mühürlenebilir. Bir paketi mühürlemek için, paket için bir Ad başlığının eklenmesi ve ardından buna benzer bir Mühürlü başlık eklenmelidir:
Name: myCompany/myPackage/
Sealed: true
Ad başlığının değeri, paketin göreli yol adıdır. Bir dosya adından ayırt etmek için '/' ile bittiğine dikkat edin. Bir Ad başlığını izleyen herhangi bir üstbilgi, araya giren boş satırlar olmadan, Ad başlığında belirtilen dosya veya pakete uygulanır. Yukarıdaki örnekte, Sealed başlığı Name: myCompany / myPackage başlığından sonra, aralarında boş satırlar olmadan yer aldığından, Sealed başlığı myCompany / myPackage paketine uygulanıyor (yalnızca) olarak yorumlanacaktır.
Paket Sürüm Oluşturma: Paket Sürümleme özelliği, sürüm oluşturma bilgilerini tutmak için birkaç bildirim üstbilgisini tanımlar. Her pakete bir dizi bu tür başlık atanabilir. Sürüm oluşturma başlıkları, paketin Ad başlığının hemen altında görünmelidir. Bu örnek, tüm sürüm başlıklarını gösterir:
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."
Manifest.MF, JAR dosyasında bulunan dosyalar hakkında bilgi içerir.
Bir JAR dosyası oluşturulduğunda, META-INF klasöründe varsayılan bir manifest.mf dosyası oluşturulur ve aşağıdaki gibi varsayılan girişleri içerir:
Manifest-Version: 1.0
Created-By: 1.7.0_06 (Oracle Corporation)
Bunlar, "başlık: değer" çiftleri şeklindeki girişlerdir. İlki bildirim sürümünü belirtir ve ikincisi JAR dosyasının oluşturulduğu JDK sürümünü belirtir.
Ana Sınıf başlığı: Bir uygulamayı bir pakette paketlemek için bir JAR dosyası kullanıldığında, uygulamanın bir giriş noktasına hizmet eden sınıfı belirtmemiz gerekir. Bu bilgileri manifest dosyasının 'Main-Class' başlığını kullanarak sağlıyoruz,
Ana Sınıf: {tam nitelikli sınıf adı}
Buradaki 'Main-Class' değeri, main metodu olan sınıftır. Bu girişi belirledikten sonra, uygulamayı çalıştırmak için JAR dosyasını çalıştırabiliriz.
Class-Path başlığı: Çoğu zaman uygulamanın JAR dosyasında paketlenmiş sınıflardan diğer JAR dosyalarına erişmemiz gerekir. Bu, 'Class-Path' başlığını kullanarak manifest dosyasında tam nitelikli yollarını sağlayarak yapılabilir,
Sınıf-Yolu: {jar1-adı jar2-adı dizin-adı / jar3-adı}
Bu başlık, aynı yerel ağdaki harici JAR dosyalarını belirtmek için kullanılabilir ve mevcut JAR içinde değil.
Paket sürümüyle ilgili başlıklar: JAR dosyası, paket sürümlemesi için kullanıldığında, Java dili belirtiminde belirtildiği gibi aşağıdaki başlıklar kullanılır:
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.
Paket mühürlemeyle ilgili başlıklar:
Ayrıca, bir JAR dosyasındaki belirli paketlerin mühürlenip mühürlenmeyeceğini de belirtebiliriz, yani bu pakette tanımlanan tüm sınıflar aynı JAR dosyasında arşivlenmelidir. Bu, 'Mühürlü' başlık yardımıyla belirtilebilir,
Ad: {paket / paket /} Mühürlenmiş: doğru
Burada paket adı "/" ile bitmelidir.
Manifest dosyalarıyla güvenliği geliştirme:
Web uygulamasının güvenliğini sağlamak için manifest dosya girişlerini kullanabiliriz veya 'İzinler', 'Codebae', 'Uygulama-Adı', 'Yalnızca Güvenilir' ve daha pek çok özellik ile paketlediği applet.
META-INF klasörü:
Bu klasör, bildirim dosyasının bulunduğu yerdir. Ayrıca, uygulama hakkında meta verileri içeren daha fazla dosya içerebilir. Örneğin, bir EJB modülü JAR dosyasında bu klasör, JAR için bildirim dosyası ile birlikte EJB modülü için EJB dağıtım tanımlayıcısını içerir. Ayrıca, üzerinde çalışacağı uygulama sunucusunun somut kapsayıcı kaynaklarına soyut EJB referanslarının eşlemesini içeren xml dosyasını içerir.
Referans:
https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html