Jar

説明

ファイルの集合をJarにします。

basedir属性は、jarを行うディレクトリです。

ファイルのパーミッションは生成したjarファイルには保存されないことに注意してください。

jarにするファイルの集合を絞り込むことが可能です。 これには、includesincludesfileexcludesexcludesfiledefaultexcludes属性を使用します。 includesincludesfile属性によって、 パターンを使用して包括したいファイルを指定します。 excludeexcludesfile属性では、 除外したいファイルを指定します。これもまたパターンを使用します。 最後に、defaultexcludes属性によって、 デフォルト除外集合を使うかどうかを指定できます。 ファイルの包括/除外の処理方法や、パターンを記述する方法については、 ディレクトリベースのタスク の節を参照してください。

このタスクは暗黙のファイルセットを作成して、 ネストした<include><exclude><patternset>要素のように、 <fileset>のすべての属性 (dirbasedirになります) をサポートします。

さらに柔軟にネストしたファイルセットを使うこともできます。 一つのJARのファイルの異なるツリーを一緒にするために、 複数のファイルセットを指定できます。 zipタスクの拡張されたfilesetやgroupfileset子要素が jarタスクでも使用可能です。 詳細と例はZipタスクを参照してください。

manifestが省略された場合、Antによって簡単なmanifestが提供されます。

JARファイルが既に存在した場合、 updateパラメータが適用されます。 yesがセットされた場合、JARファイルは 指定されたファイルで更新されます。 no (デフォルト)が指定された場合、 JARファイルは上書きされます。 Zipタスクのドキュメントに これを使用する1つの例があります。 Please note that ZIP files store file modification times with a granularity of two seconds. If a file is less than two seconds newer than the entry in the archive, Ant will not consider it newer.

(JarタスクはJARファイルのマニフェストファイルを指定するショートカットです。 同じことが、Zipタスクのzipfilesetのfullpath属性を使って可能です。 1つの違いは、manifest属性が指定されない場合、 Jarタスクは空のマニフェストを含めることです。)

マニフェストは、Jarファイル仕様に従って処理されます。 仕様に従うことで、 マニフェストの行が72バイトより大きいときは、次の行に続ける必要がある、 ということに特に注意してください。

パラメータ

属性 説明 必須
destfile 作成するJARファイル Yes
basedir ファイルをJARにする基準ディレクトリ No
compress データを保存するだけでなく、圧縮します。デフォルトでは true。 keepcompression属性をfalseに設定しない限り、 これは、更新時に追加したファイルだけでなく、 全体のアーカイブに適用される。 No
keepcompression 既存のアーカイブからのエントリ(ネスとされたzipfilesetや更新するアーカイブ)は、 compress属性を本来は使わずに、圧縮状態を保持する。 デフォルトはfalse Ant 1.6から No
encoding アーカイブに含めるファイル名に使用する文字エンコーディング。 デフォルトはUTF8。 生成されたアーカイブがJava 以外で読めなくなる可能性があるので、 この値を変更することは推奨されません。 No
filesonly ファイルエントリのみを格納します。デフォルトはfalse。 No
includes カンマかスペースで区切られた、包括するファイルのパターンのリスト。 省略時にはすべてのファイルが含まれます。 No
includesfile ファイル名。 このファイルの各行が包括パターンとして解釈されます。 No
excludes カンマかスペースで区切られた、除外するファイルのパターンのリスト。 省略時には(デフォルト除外集合を除いて)除外されるファイルはありません。 No
excludesfile ファイル名。 このファイルの各行が除外パターンとして解釈されます。 No
defaultexcludes デフォルト除外集合を使うかどうかを指定します("yes"/"no")。 省略時はデフォルト除外集合が使用されます。 No
manifest 使用するマニフェストファイル。 マニフェストの場所か、ファイルセットで追加されるJARの名前を指定可能です。 JARの名前を指定する場合、 マニフェストはJARの中のMETA-INF/MANIFEST.MFにあることが期待されます。 No
filesetmanifest zipfileset内にマニフェストが見つかったときか、zipgroupfilesetファイルが見つかったときに振舞います。 有効な値は、"skip"、"merge"、"mergewithoutmain"です。 "merge"は、互いのマニフェストをマージし、指定された他のマニフェストへマージします。 "mergewithoutmain"は、マニフェストの主要部分以外をマージします。 デフォルト値は、"skip"です。 No
update 出力ファイルが既に存在していた場合、 更新するか、上書きするかを指定します。デフォルトは、"false" No
whenempty ファイルがマッチしない場合の動作。 有効な値は、"fail"、 "skip"、"create"。 デフォルトは"skip"です。 No
duplicate 同じファイルが見つかった場合の動作。 有効な値は"add"、"preserve"、"fail"。 デフォルトの値は"add"です。 No
index クラスロードを高速化するための index list を作成するかどうか。 これはJDK1.3以上の仕様です。デフォルトはfalse。 No
manifestencoding マニフェストファイルが指定されたとき、そのエンコードでJARマニフェストを読込む。 No, デフォルトのプラットフォームエンコーディング

ネストした要素

metainf

ネストしたmetainf要素は FileSetを指定します。 このファイルセットに含まれるすべてのファイルは JARファイルのMETA-INFディレクトリに格納されます。 もしMANIFEST.MFという名前のファイルが含まれていた場合、 そのファイルは無視され、警告されます。

manifest

manifestのネストした要素は、 外部ファイルではなく、 ビルドファイル中に、 JARファイルのマニフェストをインラインで提供できるようにします。 この要素は、 manifestタスクと同じですが、 fileとmode属性は無視されます。

インラインのmanifestと外部ファイルの両方が指定されていた場合、 マニフェストはマージされます。

インラインのマニフェストを使うとき、Jarタスクは、マニフェストの内容が変わったかに 限らずチェックします。言い換えれば、指定されたマニフェストは、Jar内に存在するマニフェストと多少違います。 マニフェストの値が変わったら、適切だとして、jarは、更新するかまたは再ビルドされます。

  <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/>

${build}/classesディレクトリ内のすべてのファイルを、 ${dist}/libディレクトリのapp.jarファイルに Jarします。

  <jar destfile="${dist}/lib/app.jar"
       basedir="${build}/classes"
       excludes="**/Test.class"
  />

${build}/classesディレクトリのすべてのファイルを、 ${dist}/libディレクトリのapp.jarファイルに Jarします。 Test.classという名前のファイルは除外されます。

  <jar destfile="${dist}/lib/app.jar"
       basedir="${build}/classes"
       includes="mypackage/test/**"
       excludes="**/Test.class"
  />

${build}/classesディレクトリのすべてのファイルを、 ${dist}/libディレクトリのapp.jarファイルにJarします。 ただし、ディレクトリmypackage/testの下のファイルだけで、 また、Test.classという名前のファイルは除外されます。

  <jar destfile="${dist}/lib/app.jar">
    <fileset dir="${build}/classes"
             excludes="**/Test.class"
    />
    <fileset dir="${src}/resources"/>
  </jar>

${build}/classesディレクトリと${src}/resourcesディレクトリ 内のすべてのファイルを一緒に、 ${dist}/libディレクトリのapp.jarにJarします。 Test.classという名前のファイルは除外されます。 ${build}/classes/mypackage/MyClass.class${src}/resources/mypackage/image.gif といったファイルがあった場合、同じディレクトリにJarされるでしょう (このように、Javaの同じパッケージにあるようにできます)。

  <jar destfile="test.jar" basedir=".">
    <include name="build"/>
    <manifest>
      <attribute name="Built-By" value="${user.name}"/>
      <section name="common/class1.class">
        <attribute name="Sealed" value="false"/>
      </section>
    </manifest>
  </jar>

これはインラインのmanifestを使った例です。 Built-By属性がAntのプロパティー${user.name}の値を使っていることに 注意していください。 上の例で作成されるマニフェストは次のようになるでしょう。

Manifest-Version: 1.0
Built-By: conor
Created-By: Apache Ant 1.5alpha

Name: common/class1.class
Sealed: false

Copyright © 2000-2004 The Apache Software Foundation. All rights Reserved.

[訳注:これは風間一洋、宮本信二の訳を参考に、横田聡が翻訳しました。日本語訳に対するコメントがあれば report@jajakarta.orgに送ってください]