28 Haziran 2018 Perşembe

META-INF/MANIFEST.MF Dosyası

Giriş
META-INF Dizini : JAR hakkında bir çok bilgiyi içeren MANIFEST.MF dosyasını içerir. 
BOOT-INF/classes Dizini: Bütün uygulama class dosyaları bu dizindedir
BOOT-INF/lib Dizini: Bütün kullanılan kütüphaneler bu dizindedir

jar dosyası üretilince otomatik olarak bir manifest dosyası da üretilir. Dosya Key: Value1 Value2 şeklinde satırlardan oluşur.

Class-Path Satırı
Jar dosyasının ihtiyacı olan diğer jar dosyalarını belirtir. Açıklaması şöyle
New problems arise when distributing JARs that depend on other JARs:

1. You need to define the same libraries in the same version
2. More importantly, the -cp argument doesn't work with JARs. To reference other JARs, the classpath needs to be set in a JAR's manifest via the Class-Path attribute:

Class-Path: lib/one.jar;lib/two.jar;lib/three.jar;

3. For this reason, you need to put JARs in the same location, relative or absolute, on the target filesystem as per the manifest. That implies to open the JAR and read the manifest first.
Burada dikkat edilmesi gereken nokta göreceli yol (relative path) olması. Açıklaması şöyle
It’s also important to note that path specified in manifest file is not absolute instead they are relative from application jar’s path. For example in above if your application jar file is in C:\test directory you must need a lib directory inside test and tibco.jar and log4j.jar inside that.
Örnek
Şöyle yaparız.
Class-Path: lib/poi-3.10-FINAL.jar lib/commons-codec-1.5.jar
Örnek
"java -cp ..." komut satırı yerine bağımlı olduğumuz tüm jar'ları belirtmek için kullanılır. Şöyle yaparız.
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: XxxxXxxxx
Class-Path: lib/jersey-client-2.13.jar lib/jersey-common-2.13.jar lib/
 javax.annotation-api-1.2.jar lib/jersey-guava-2.13.jar lib/osgi-resou
 rce-locator-1.0.1.jar lib/javax.ws.rs-api-2.0.1.jar lib/hk2-api-2.3.0
 -b10.jar lib/hk2-utils-2.3.0-b10.jar lib/aopalliance-repackaged-2.3.0
 -b10.jar lib/javax.inject-2.3.0-b10.jar lib/hk2-locator-2.3.0-b10.jar
  lib/javassist-3.18.1-GA.jar
Created-By: Apache Maven 3.0.5
Build-Jdk: 1.8.0_20
Main-Class: com.client.App
Created-By Satırı
1.7.0_80-b15 (Oracle Corporation) gibi şey ise JDK araçları tarafından oluşturulmuştur. Apache Maven ise maven oluşturmuştur.

Main-Class Satırı
Eğer bu satır yoksa executable jar'ı çalıştırmayı denersek şu hatayı alırız.
no main manifest attribute, in Foo.jar
Örnek
Şöyle yaparız
Manifest-Version: 9.9
Ant-Version: Apache Ant 1.9.6
Class-Path: app.jar
Created-By: 1.7.0_80-b15 (Oracle Corporation)
Main-Class: test.App

Name: test/App.class
D: MCwCFCc9lvmNijUSfZwkwYoySDWuoRjhAhQ9yKS8YH7hKVZ54dTihEwk3Q27sw==
Manifest-Version Satırı
Dosyanın içinde Manifest Sürümü, Kimin tarafından üretildiği gibi bilgiler vardır
Örnek
Şöyle yaparız
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 20.12-b01 (Sun Microsystems Inc.)
Implementation-Vendor: Oracle Corporation
Implementation-Title: JDBC
Implementation-Version: 12.1.0.1.0
Repository-Id: JAVAVM_12.1.0.1.0_LINUX.X64_130403
Specification-Vendor: Sun Microsystems Inc.
Specification-Title: JDBC
Specification-Version: 4.0
Main-Class: oracle.jdbc.OracleDriver
sealed: true
Start-Class
Açıklama yaz

Hiç yorum yok:

Yorum Gönder