JavaでのMANIFEST.MFファイルの使用


92

JAR、WAR、およびEARファイルにはMANIFEST.MFMETA-INFフォルダーの下にファイルがあることに気付きました。

MANIFEST.MFファイルの用途は何ですか?このファイルで指定できるものは何ですか?



回答:


87

Java Development Kitのバージョン1.0で作成されたJARファイルのマニフェストファイルの内容は次のとおりです。

Manifest-Version: 1.0

すべてのエントリは名前と値のペアです。ヘッダーの名前とその値はコロンで区切られます。デフォルトのマニフェストは、マニフェスト仕様のバージョン1.0に準拠していることを示しています。マニフェストには、アーカイブにパッケージ化されている他のファイルに関する情報を含めることもできます。マニフェストに記録されるファイル情報は、JARファイルの使用目的によって異なります。デフォルトのマニフェストファイルは、他のファイルについて記録する必要がある情報を想定していません。そのため、その1行には、それ自体に関するデータのみが含まれています。特別な目的のマニフェストヘッダー

JARファイルの目的の役割によっては、デフォルトのマニフェストを変更する必要がある場合があります。JARファイルがアーカイブ目的でのみ作成されている場合、MANIFEST.MFファイルは無意味です。JARファイルのほとんどの使用は、単純なアーカイブと圧縮を超えており、マニフェストファイルに特別な情報を含める必要があります。以下に要約すると、いくつかの特別な目的のJARファイル関数に必要なヘッダーの簡単な説明があります

JARファイルとしてバンドルされているアプリケーションアプリケーションがJARファイルにバンドルされている場合、Java仮想マシンに、アプリケーションのエントリポイントが何であるかを通知する必要があります。エントリポイントは、public static void main(String [] args)メソッドを持つ任意のクラスです。この情報は、一般的な形式のMain-Classヘッダーで提供されます。

Main-Class: classname

値classnameは、アプリケーションのエントリポイントで置き換えられます。

ダウンロード拡張機能:ダウンロード拡張機能は、他のJARファイルのマニフェストファイルによって参照されるJARファイルです。典型的な状況では、アプレットは、そのマニフェストがそのアプレットの目的で拡張機能として機能するJARファイル(または複数のJARファイル)を参照するJARファイルにバンドルされます。拡張機能は、同じ方法で相互に参照できます。ダウンロード拡張機能は、アプレット、アプリケーション、または別の拡張機能のマニフェストファイルのClass-Pathヘッダーフィールドで指定されます。Class-Pathヘッダーは、たとえば次のようになります。

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

このヘッダーを使用すると、servlet.jar、infobus.jar、およびacme / beans.jarファイル内のクラスが、アプレットまたはアプリケーションの拡張機能として機能します。Class-Pathヘッダー内のURLは、アプレットまたはアプリケーションのJARファイルのURLに対して相対的に与えられます。

パッケージのシーリング: JARファイル内のパッケージはオプションでシールできます。つまり、そのパッケージで定義されたすべてのクラスは同じJARファイルにアーカイブする必要があります。ソフトウェア内のクラス間でバージョンの一貫性を確保するため、またはセキュリティ対策として、パッケージを封印する場合があります。パッケージをシールするには、次のように、パッケージにNameヘッダーを追加し、その後にSealedヘッダーを追加する必要があります。

Name: myCompany/myPackage/
Sealed: true

Nameヘッダーの値は、パッケージの相対パス名です。ファイル名と区別するために、末尾が「/」であることに注意してください。Nameヘッダーに続くヘッダーは、間に空白行がないため、Nameヘッダーで指定されたファイルまたはパッケージに適用されます。上記の例では、ShieldedヘッダーがName:myCompany / myPackageヘッダーの後にあり、間に空白行がないため、ShieldedヘッダーはパッケージmyCompany / myPackageに(のみ)適用すると解釈されます。

パッケージのバージョン管理:パッケージのバージョン管理仕様では、バージョン管理情報を保持するためのいくつかのマニフェストヘッダーを定義しています。このようなヘッダーのセットを各パッケージに割り当てることができます。バージョン管理ヘッダーは、パッケージのNameヘッダーのすぐ下に表示されます。この例は、すべてのバージョン管理ヘッダーを示しています。

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."

35
誰かの作品をコピーしないでください。Webページへのリンクを追加する必要があります。docs.oracle.com/javase/tutorial/deployment/jar/sealman.html
Vash

57
これはコピーではなく、5ページの要約です。
フランク

65
この要約を呼び出すことができます。文章はコピーされ、追加の結論やポイントはありません。私はあなたが誰かの仕事を尊重し、リンクと引用を追加するべきだと思います。
DamianLeszczyński-2012年

19

Manifest.MFには、JARファイルに含まれるファイルに関する情報が含まれています。

JARファイルが作成されると、デフォルトのmanifest.mfファイルがMETA-INFフォルダー内に作成され、次のようなデフォルトのエントリが含まれます。

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

これらは、「header:value」のペアとしてのエントリです。1つ目はマニフェストバージョンを指定し、2つ目はJARファイルの作成に使用するJDKバージョンを指定します。

Main-Classヘッダー: JARファイルを使用してアプリケーションをパッケージにバンドルする場合、アプリケーションのエントリーポイントを提供するクラスを指定する必要があります。この情報は、マニフェストファイルの「Main-Class」ヘッダーを使用して提供します。

メインクラス:{完全修飾クラス名}

ここでの「Main-Class」値は、mainメソッドを持つクラスです。このエントリを指定したら、JARファイルを実行してアプリケーションを実行できます。

Class-Pathヘッダー: ほとんどの場合、アプリケーションのJARファイル内にパッケージ化されたクラスから他のJARファイルにアクセスする必要があります。これは、「Class-Path」ヘッダーを使用してマニフェストファイルに完全修飾パスを提供することで実行できます。

クラスパス:{jar1-name jar2-name directory-name / jar3-name}

このヘッダーを使用して、現在のJAR内ではなく、同じローカルネットワーク上の外部JARファイルを指定できます。

パッケージバージョン関連のヘッダー: JARファイルをパッケージのバージョン管理に使用する場合、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.

パッケージのシーリング関連ヘッダー:

また、JARファイル内の特定のパッケージをシールするかどうかを指定することもできます。つまり、そのパッケージで定義されているすべてのクラスを同じJARファイルにアーカイブする必要があります。これは、「Sealed」ヘッダーを使用して指定できます。

名前:{package / some-package /} Sealed:true

ここで、パッケージ名は「/」で終わる必要があります。

マニフェストファイルによるセキュリティの強化:

マニフェストファイルエントリを使用して、 'Permissions'、 'C​​odebae'、 'Application-Name'、 'Trusted-Only'などのさまざまな属性を持つWebアプリケーションまたはアプレットのセキュリティを確保できます。

META-INFフォルダー:

このフォルダーは、マニフェストファイルが存在する場所です。また、アプリケーションに関するメタデータを含むより多くのファイルを含めることができます。たとえば、EJBモジュールのJARファイルでは、このフォルダーには、EJBモジュールのEJBデプロイメント記述子とJARのマニフェストファイルが含まれています。また、抽象EJB参照と、それが実行されるアプリケーションサーバーの具象コンテナリソースへのマッピングを含むxmlファイルも含まれています。

リファレンス:https :
//docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.