モジュール java.base
パッケージ java.util.jar

クラスJarFile

java.lang.Object
java.util.zip.ZipFile
java.util.jar.JarFile
すべての実装されたインタフェース:
Closeable, AutoCloseable

public class JarFile extends ZipFile
JarFileクラスは、java.io.RandomAccessFileで開くことができる任意のファイルからjarファイルの内容を読み取るために使います。 これは、オプションのManifestエントリの読取りをサポートし、マルチ・リリースjarファイルの処理をサポートして、クラスjava.util.zip.ZipFileを拡張します。 Manifestエントリは、jarファイルとそのエントリのメタ情報を指定するために使います。

「マルチ・リリースjarファイル」は、"Multi-Release"というメイン属性を持つマニフェスト、一連の"base"エントリ、その一部は、jarファイルのパブリック・インタフェースを構成するパブリック・メソッドまたは保護されたメソッドを持つパブリック・クラス、および"META-INF/versions"ディレクトリのサブディレクトリに含まれる一連の"versioned"エントリを含むjarファイルです。 バージョニングされたエントリは、Javaプラットフォームのメジャー・バージョンによってパーティション化されます。 "META-INF/versions/{n}"ディレクトリ内のバージョンn8 < nを持つバージョニングされたエントリは、ベース・エントリおよびバージョン番号i (8 < i < n)のエントリをオーバーライドします。

デフォルトでは、マルチ・リリースjarファイルのJarFileは、プレーンな(unversioned) jarファイルであるかのようにマルチ・リリースjarファイルを処理するように構成されているため、エントリ名は最大で1つのベース・エントリに関連付けられます。 JarFileは、JarFile(File, boolean, int, Runtime.Version)コンストラクタを使用してJarFileを作成することで、マルチ・リリースjarファイルを処理するように構成できます。 Runtime.Versionオブジェクトは、バージョニングされたエントリの検索時に使用される最大バージョンを設定します。 構成されている場合、エントリ名は、最大で1つの基本エントリと0個以上のバージョン管理されたエントリに対応できます。 エントリ名を、バージョンが最大バージョン(getEntry(String)を参照してください)以下の最新のバージョン管理されたエントリに関連付ける検索が必要です。

JarFileを使用してJarFileエントリの内容からクラスをロードするクラス・ローダーは、最後の引数に割り当てられた値Runtime.version()を持つJarFile(File, boolean, int, Runtime.Version)コンストラクタを起動して、JarFileを構築する必要があります。 これにより、実行中のJVMのメジャー・バージョンと互換性のあるクラスが、マルチ・リリースjarファイルからロードされます。

シグネチャ付きjarファイル・ファイルを開くときにverifyフラグがオンになっている場合、そのjarエントリの内容は、path nameに関連付けられているマニフェスト内に埋め込まれたシグネチャに対して検証されます。 複数文字のjarファイルの場合、バージョニングされたエントリの内容はそのシグネチャに対してverfieidとなり、JarEntry.getCodeSigners()は独自のシグネチャ者を戻します。 検証プロセスには、署名者の証明書の検証は含まれていないことに注意してください。 呼出し側で、JarEntry.getCodeSigners()の戻り値を検査し、署名が信頼できるかどうかをさらに判断してください。

ほかで指定がない場合、null引数をコンストラクタまたはこのクラスのメソッドへ渡すと、NullPointerExceptionがスローされます。

実装上のノート:
APIを使用してJarFile (例えば、コンパイルされたアプリケーションやライブラリの構成を上書きします)を構成できない場合、2つのSystemプロパティを使用できます。
  • jdk.util.jar.versionには、負でない整数<= Runtime.version().feature()String表現である値を割り当てることができます。 この値は、実効ランタイム・バージョンをRuntime.version().feature()を評価することによって得られたデフォルト値以外の値に設定するために使用されます。 実効ランタイム・バージョンは、最後の引数の値がJarFile.runtimeVersion()のときにJarFile(File, boolean, int, Runtime.Version)コンストラクタが使用するバージョンです。
  • jdk.util.jar.enableMultiReleaseには、3つのStringtruefalse、またはforceのいずれかを割り当てることができます。 true(デフォルト値)は、マルチ・リリースjarファイルの処理を有効にします。 falseは、マルチ・リリースjar処理を無効にし、"Multi-Release"マニフェスト属性およびマルチ・リリースjarファイルのバージョン管理されたディレクトリ(存在する場合)を無視します。 さらに、メソッドisMultiRelease()falseを返します。 forceを指定すると、JarFileは作成後にランタイム・バージョニングに初期化されます。 これはこのコードと事実上同じです: (new JarFile(File, boolean, int, JarFile.runtimeVersion())
導入されたバージョン:
1.2
関連項目: