-
- 含まれているクラス:
- Pack200
public static interface Pack200.Packer
packerエンジンは、さまざまな変換を入力JARファイルに適用して、パック・ストリームをgzipやzipなどのコンプレッサを使用して大幅に圧縮可能にします。 エンジンのインスタンスは、Pack200.newPacker()
を使用して取得できます。 高度な圧縮は、JSR 200仕様で説明されている多数のテクニックを使用して実現されます。 これらの技術には、定数プールのソート、再順序付け、および同位置への配置が含まれます。packエンジンは、初期化されると、次に示すプロパティで規定された初期状態になります。 初期状態を操作するには、(
properties()
を使用して)エンジン・プロパティを取得してから、修正したプロパティをマップに格納します。 リソース・ファイルは、一切変更なしで渡されます。 unpackerは、定数プール順などの一般的ではないクラス・ファイル機能に自由に変更できるため、クラス・ファイルには同一のバイトは含まれません。 ただし、『Java™仮想マシン仕様』で指定されているように、これらのクラス・ファイルは意味的に同一です。デフォルトでは、packerがJAR要素の順序を変更することはありません。 また、各JAR要素の修正時間およびデフレーション・ヒントは、変更を加えられずに渡されます (Unixファイルのアクセス権を付与する追加属性などの、ほかのZIPアーカイブ情報は失われる)。
一般に、JARのパックおよび展開により、JARのクラス・ファイル内にあるバイト単位のコンテンツが変更されます。 これは、通常、パックおよび展開により、JAR要素のバイト単位イメージに依存するデジタル署名がすべて無効になることを意味します。 JARの署名とパックの両方を実行するためには、最初にJARのパックと展開を実行して「正規化」してから、展開されたJAR要素上の署名を計算し、最後に署名済みのJARを再パックする必要があります。 両方のパック手順で正確に同じオプションを使用してください。また、クラス・ファイルのサイズは微妙に変化するため、セグメント境界を意図せずに変更してしまうことを避けるために、セグメント制限を「-1」に設定することが必要な場合もあります。
(このように行える理由: パック・プログラムが実行するクラス・ファイル構造の再配置はべき等であるため、2回目のパックでは、最初のパックで生成された順序が変更されない。 またアンパック・プログラムでは、どのようなアーカイブ要素の伝送順序に対しても特定のバイト・イメージを生成することが、JSR 200仕様で保証されている)
下位互換性を保持するために、パック・ファイルのバージョンは、入力JARファイルにあるクラス・ファイルに適合するよう設定されます。 つまり、クラス・ファイルが最新であればパック・ファイルのバージョンも最新となり、反対に、クラス・ファイルのバージョンがもっとも古い場合は、パック・ファイルのバージョンも、もっとも古くなるということです。 中間のクラス・ファイルのバージョンについては、対応するパック・ファイルのバージョンが使用されます。 たとえば、入力JARファイルが1.5 (またはそれ未満の)クラス・ファイルでのみ構成される場合は、1.5と互換性のあるパック・ファイルが生成されます。 これは、クラス・ファイルのないアーカイブにも該当します。 入力JARファイルに1.6クラス・ファイルが含まれる場合、パック・ファイルのバージョンは1.6に設定されます。
注: ほかで指定がない場合、
null
引数をコンストラクタ、またはこのクラスのメソッドへ渡すとNullPointerException
がスローされます。- 導入されたバージョン:
- 1.5
-
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static String
CLASS_ATTRIBUTE_PFX
クラス属性名に連結された場合、JSR 200仕様で指定されたレイアウト言語を使用して、その属性の形式を示します。static String
CODE_ATTRIBUTE_PFX
コード属性名と連結して使用された場合、属性の形式を示します。static String
DEFLATE_HINT
static String
EFFORT
このプロパティが1桁の10進数に設定されると、packerは指定された量の労力をアーカイブの圧縮に費やします。static String
ERROR
文字列「error」は、特定のプロパティで使用できます。static String
FALSE
文字列「false」は、特定のプロパティで使用できます。static String
FIELD_ATTRIBUTE_PFX
フィールド属性名と連結して使用された場合、属性の形式を示します。static String
KEEP
文字列「keep」は、特定のプロパティで使用できます。static String
KEEP_FILE_ORDER
このプロパティがTRUE
に設定されると、packerはソース・アーカイブ内のすべての要素を元の順序で転送します。static String
LATEST
文字列「latest」は、特定のプロパティで使用できます。static String
METHOD_ATTRIBUTE_PFX
メソッド属性名と連結して使用された場合、属性の形式を示します。static String
MODIFICATION_TIME
このプロパティが特殊な文字列LATEST
に設定されると、packerは、元のアーカイブ内の利用可能な全エントリ内で最新の修正時間、または各セグメント内の利用可能な全エントリの最新の修正時間の決定を試みます。static String
PASS
文字列「pass」は、特定のプロパティで使用できます。static String
PASS_FILE_PFX
ファイルを圧縮せずにバイト単位で渡すことを示します。static String
PROGRESS
パッカーは、パーセンテージで示され、定期的にパッカーによって更新されます。static String
SEGMENT_LIMIT
このプロパティは、各アーカイブ要素の推定ターゲット・サイズN (単位はバイト)を付与する数値です。static String
STRIP
文字列「strip」は、特定のプロパティで使用できます。static String
TRUE
文字列「true」は、特定のプロパティで使用できます。static String
UNKNOWN_ATTRIBUTE
不明な属性を含むクラス・ファイルに遭遇したときに実行するアクションを示します。
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 抽象メソッド 修飾子と型 メソッド 説明 void
pack(JarFile in, OutputStream out)
JarFileを取得して、Pack200アーカイブに変換します。void
pack(JarInputStream in, OutputStream out)
JarInputStreamを取得して、Pack200アーカイブに変換します。SortedMap<String,String>
properties()
このエンジンのプロパティ・セットを取得します。
-
-
-
フィールドの詳細
-
SEGMENT_LIMIT
static final String SEGMENT_LIMIT
このプロパティは、各アーカイブ要素の推定ターゲット・サイズN (単位はバイト)を付与する数値です。 Nバイト以上を必要とする単一の入力ファイルには、独立したアーカイブ・セグメントが割り当てられます。たとえば、これは特殊な例ですが、値が -1の場合、すべての入力ファイルを含む単一の巨大なセグメントが生成されます。一方、値が0の場合、クラスごとにセグメントが1つずつ生成されます。 アーカイブ・セグメントのサイズが大きければ大きいほど断片化は起こりにくく、圧縮率も高くなります。しかし、こうしたセグメントを処理するためには、大量のメモリーが必要になります。
各セグメントのサイズは、セグメント内で転送される入力ファイルのサイズと、このファイルの名前のサイズ、およびその他の転送プロパティによって予測されます。
デフォルトは -1ですが、これは、パッカーが常に単一のセグメント出力ファイルを作成することを意味します。 非常に大きな出力ファイルが生成される場合には、セグメント化を使用するか、入力ファイルをより小さなJARに分割することを強くお薦めします。
通常、この制限なしでパックされた10MバイトのJARは約10%余計に小さくなりますが、packerにはより多くのJavaヒープ(セグメント制限の約10倍)が必要になります。
- 関連項目:
- 定数フィールド値
-
KEEP_FILE_ORDER
static final String KEEP_FILE_ORDER
このプロパティがTRUE
に設定されると、packerはソース・アーカイブ内のすべての要素を元の順序で転送します。これが
FALSE
に設定されると、packerは要素を再度順序付けし、Javaアプリケーションに関する有用な情報を含まないJARディレクトリ・エントリも削除します。 (通常は、これにより圧縮率が向上する)。デフォルトは
TRUE
です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。- 関連項目:
- 定数フィールド値
-
EFFORT
static final String EFFORT
このプロパティが1桁の10進数に設定されると、packerは指定された量の労力をアーカイブの圧縮に費やします。 レベル1の場合、圧縮速度は速くても圧縮率はそれほど高くありません。レベル9の場合、圧縮速度は遅くても圧縮率は高くなります。特殊な値0を指定すると、packerは元のJARファイルを圧縮せずに直接コピーします。 JSR 200標準では、すべてのアンパック・ツールはこの特殊な処理をアーカイブ全体のパススルーとして理解する必要があります。
デフォルト値は5です。この場合、標準的な時間で、適度な圧縮が行われます。
- 関連項目:
- 定数フィールド値
-
DEFLATE_HINT
static final String DEFLATE_HINT
このプロパティがTRUE
またはFALSE
に設定されると、packerは出力アーカイブ内でそれに応じたデフレーション・ヒントを設定し、アーカイブ要素の個別のデフレーション・ヒントを転送しません。このプロパティが特殊な文字列
KEEP
に設定されると、packerは入力アーカイブ内の利用可能な要素ごとに独立したデフレーション・ヒントを決定し、ヒントを別個に転送しようと試みます。デフォルトは
KEEP
です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。展開するjarの要素を正しく圧縮するためにヒントを適切に処理することは、unpacker実装に依存します。
ZIPまたはJAR要素のデフレーション・ヒントは、要素が圧縮されたか、そのまま格納されたかを示します。
- 関連項目:
- 定数フィールド値
-
MODIFICATION_TIME
static final String MODIFICATION_TIME
このプロパティが特殊な文字列LATEST
に設定されると、packerは、元のアーカイブ内の利用可能な全エントリ内で最新の修正時間、または各セグメント内の利用可能な全エントリの最新の修正時間の決定を試みます。 この単一の値はセグメントの一部として転送され、各セグメントSEGMENT_LIMIT
の全エントリに適用されます。これにより、インストールされたファイルすべてが単一の日付に設定される代わりに、転送するアーカイブのサイズをわずかに減少させることができます。
このプロパティを特殊な文字列
KEEP
に設定すると、packerは入力要素ごとに別個の修正時間を転送します。デフォルトは
KEEP
です。これにより、入力情報は保存されますが、転送するアーカイブのサイズが必要以上に大きくなる場合があります。出力ファイルの各要素の修正時間を正しく設定するために適切な処理を実行することは、unpacker実装に依存します。
- 関連項目:
SEGMENT_LIMIT
、定数フィールド値
-
PASS_FILE_PFX
static final String PASS_FILE_PFX
ファイルを圧縮せずにバイト単位で渡すことを示します。 複数のファイルを指定する場合は、識別可能な文字列が付加された追加プロパティを設定することで、一群のプロパティに共通の接頭辞を指定します。システム・ファイル・セパレータがJARファイル・セパレータ「/」に置き換えられる点を除き、パス名の変換は行われません。
ファイル名は、JARファイル内の文字列と完全に一致していなければなりません。
プロパティ値がディレクトリ名の場合、そのディレクトリ内のすべてのファイルも渡されます。
例
Map p = packer.properties(); p.put(PASS_FILE_PFX+0, "mutants/Rogue.class"); p.put(PASS_FILE_PFX+1, "mutants/Wolverine.class"); p.put(PASS_FILE_PFX+2, "mutants/Storm.class"); # Pass all files in an entire directory hierarchy: p.put(PASS_FILE_PFX+3, "police/");
- 関連項目:
- 定数フィールド値
-
UNKNOWN_ATTRIBUTE
static final String UNKNOWN_ATTRIBUTE
不明な属性を含むクラス・ファイルに遭遇したときに実行するアクションを示します。 利用可能な値は、文字列ERROR
、STRIP
、およびPASS
です。文字列
ERROR
は、タイプIOException
の例外で、パック操作が全体として失敗したことを意味します。 文字列STRIP
は、属性が削除されることを意味します。 文字列PASS
は、クラス・ファイル全体が(リソース・ファイルのように)圧縮なしで渡され、適切な警告が示されることを意味します。 これが、このプロパティのデフォルト値です。例
Map p = pack200.getProperties(); p.put(UNKNOWN_ATTRIBUTE, ERROR); p.put(UNKNOWN_ATTRIBUTE, STRIP); p.put(UNKNOWN_ATTRIBUTE, PASS);
- 関連項目:
- 定数フィールド値
-
CLASS_ATTRIBUTE_PFX
static final String CLASS_ATTRIBUTE_PFX
クラス属性名に連結された場合、JSR 200仕様で指定されたレイアウト言語を使用して、その属性の形式を示します。たとえば、
pack.class.attribute.SourceFile=RUH
には、このオプションの効果が組み込まれています。特殊な文字列
ERROR
、STRIP
、およびPASS
も、UNKNOWN_ATTRIBUTE
と同じ意味を持つものとして許可されています。 ユーザーは、これを使用することで、特定の属性を(クラス圧縮なしで)ビット単位で拒否したり、取り除いたり、渡したりできます。次のようなコードを使用して、JCOV用の属性をサポートできます。
Map p = packer.properties(); p.put(CODE_ATTRIBUTE_PFX+"CoverageTable", "NH[PHHII]"); p.put(CODE_ATTRIBUTE_PFX+"CharacterRangeTable", "NH[PHPOHIIH]"); p.put(CLASS_ATTRIBUTE_PFX+"SourceID", "RUH"); p.put(CLASS_ATTRIBUTE_PFX+"CompilationID", "RUH");
次のようなコードを使用して、デバッグ属性を取り除くことができます。
Map p = packer.properties(); p.put(CODE_ATTRIBUTE_PFX+"LineNumberTable", STRIP); p.put(CODE_ATTRIBUTE_PFX+"LocalVariableTable", STRIP); p.put(CLASS_ATTRIBUTE_PFX+"SourceFile", STRIP);
- 関連項目:
- 定数フィールド値
-
FIELD_ATTRIBUTE_PFX
static final String FIELD_ATTRIBUTE_PFX
フィールド属性名と連結して使用された場合、属性の形式を示します。 たとえば、pack.field.attribute.Deprecated=
には、このオプションの効果が組み込まれています。 特殊な文字列ERROR
、STRIP
、およびPASS
も使用できます。- 関連項目:
CLASS_ATTRIBUTE_PFX
、定数フィールド値
-
METHOD_ATTRIBUTE_PFX
static final String METHOD_ATTRIBUTE_PFX
メソッド属性名と連結して使用された場合、属性の形式を示します。 たとえば、pack.method.attribute.Exceptions=NH[RCH]
には、このオプションの効果が組み込まれています。 特殊な文字列ERROR
、STRIP
、およびPASS
も使用できます。- 関連項目:
CLASS_ATTRIBUTE_PFX
、定数フィールド値
-
CODE_ATTRIBUTE_PFX
static final String CODE_ATTRIBUTE_PFX
コード属性名と連結して使用された場合、属性の形式を示します。 たとえば、pack.code.attribute.LocalVariableTable=NH[PHOHRUHRSHH]
には、このオプションの効果が組み込まれています。 特殊な文字列ERROR
、STRIP
、およびPASS
も使用できます。- 関連項目:
CLASS_ATTRIBUTE_PFX
、定数フィールド値
-
PROGRESS
static final String PROGRESS
パッカーは、パーセンテージで示され、定期的にパッカーによって更新されます。 値0 - 100は正常、-1は停滞を示します。 進捗は、このプロパティの値をポーリングしてモニターできます。パッカーは、最低でもパッキング操作の開始時に0に、最後に100に進捗を設定する必要があります。
- 関連項目:
- 定数フィールド値
-
KEEP
static final String KEEP
文字列「keep」は、特定のプロパティで使用できます。
-
PASS
static final String PASS
文字列「pass」は、特定のプロパティで使用できます。
-
STRIP
static final String STRIP
文字列「strip」は、特定のプロパティで使用できます。
-
ERROR
static final String ERROR
文字列「error」は、特定のプロパティで使用できます。
-
TRUE
static final String TRUE
文字列「true」は、特定のプロパティで使用できます。
-
FALSE
static final String FALSE
文字列「false」は、特定のプロパティで使用できます。
-
LATEST
static final String LATEST
文字列「latest」は、特定のプロパティで使用できます。- 関連項目:
MODIFICATION_TIME
、定数フィールド値
-
-
メソッドの詳細
-
properties
SortedMap<String,String> properties()
このエンジンのプロパティ・セットを取得します。 このセットは「ライブ・ビュー」であるため、内容を変更するとただちにPackerエンジンがその影響を受けます。また、エンジンから行われた変更(進捗の表示など)は、ただちにマップで確認できます。プロパティ・マップには、定義済みの実装固有のプロパティやデフォルトのプロパティを含められます。 ユーザーは、既存のプロパティを変更する前に、情報を確認して意味を十分に理解することが推奨されています。
実装固有のプロパティには、
com.
で始まる、実装者に関連付けられたパッケージ名、または類似の接頭辞が付加されます。pack.
およびunpack.
で始まるすべてのプロパティ名は、このAPI用に予約されています。不明なプロパティは、未指定のエラーとして無視または拒否できます。無効なエントリにより、詳細不明エラーがスローされる場合があります。
返されるマップは、オプションの
SortedMap
をすべて実装します。- 戻り値:
- プロパティ・キー文字列とプロパティ値の、ソートされた関連付け
-
pack
void pack(JarFile in, OutputStream out) throws IOException
JarFileを取得して、Pack200アーカイブに変換します。入力を閉じますが、出力は閉じません (Pack200アーカイブは追加可能)。
- パラメータ:
in
- JarFileout
- OutputStream- 例外:
IOException
- エラーが発生した場合。
-
pack
void pack(JarInputStream in, OutputStream out) throws IOException
JarInputStreamを取得して、Pack200アーカイブに変換します。入力を閉じますが、出力は閉じません (Pack200アーカイブは追加可能)。
JARマニフェスト・ファイルおよびそれを含むディレクトリで、修正時間およびデフレーション・ヒント属性を使用することはできません。
- パラメータ:
in
- JarInputStreamout
- OutputStream- 例外:
IOException
- エラーが発生した場合。- 関連項目:
MODIFICATION_TIME
,DEFLATE_HINT
-
-