Tar

説明

tar アーカイブを作成します。

basedir 属性は、tar の基準となるディレクトリです。

このタスクはディレクトリベースのタスクであり、暗黙的にFilesetを形成します。これにより、basedir を基準とした、アーカイブに含めるファイルが定義されます。tar タスクは、Fileset のすべての属性をサポートしており、暗黙的な fileset に含めるファイルのセットを絞り込むことができます。

暗黙的な filesetに加えて、tar タスクはネストされたリソースコレクションと、特殊な形式の fileset をサポートしています。これらの fileset は拡張されており、tar エントリに適用されるアクセスモード、ユーザー名、グループ名を制御できます。これは、一部のファイルに実行権限が必要な Unix システム用のアーカイブを準備する場合などに役立ちます。デフォルトでは、このタスクはファイルに 644、ディレクトリに 755 の Unix 権限を使用します。

初期のバージョンのtar ユーティリティは、100 文字を超えるパスをサポートしていませんでした。その後、互換性のない複数の拡張機能が開発され、ファイル名が100文字を超える問題に対処したPAX拡張ヘッダー(pax ユーティリティで最初に導入された)を追加した新しい POSIX 標準が作成されるまで、様々な非互換な拡張が開発されました。現代のtarの実装はすべて、PAX 拡張ヘッダーをサポートしています。

Ant のtar のサポートはPAX拡張ヘッダーの標準よりも古いものであり、longfile 属性を使用して有効にできるさまざまな方言をサポートしています。longfile 属性が fail に設定されている場合、長いパスがあると tar タスクは失敗します。longfile 属性が truncate に設定されている場合、長いパスはアーカイブに追加する前に100文字の最大長に切り捨てられます。longfile 属性の値が omit に設定されている場合、長いパスを含むファイルはアーカイブから省略されます。どちらのオプションも、アーカイブを任意の準拠バージョンのtarで展開できるようにします。

パスまたはファイル情報の損失が許容できない場合(ほとんどの場合、許容できません)、longfilegnu または posix に設定できます。posix を使用すると、Ant は PAX 拡張ヘッダーを追加し、gnu を使用すると、新しいバージョンの GNU taroldgnu と呼ぶ GNU tar 固有の拡張機能を追加します。GNU tar はデフォルトでこれらの拡張機能を作成しますが、PAX 拡張ヘッダーもサポートしています。どちらの選択肢も、任意の長さのパスを持つ tar ファイルを作成します。ただし、結果として得られるアーカイブは、選択した形式をサポートするtarツールでのみ展開できることに注意してください。

longfile 属性のデフォルトは warn であり、gnu オプションと同様に動作しますが、制限に一致しないファイルパスごとに警告を出力します。後方互換性の理由から gnu ではなく posix を使用します。

最高の相互運用性を実現するには、longfile 属性に fail または posix を使用してください。

このタスクは、compression 属性を gzipbzip2、または xz に設定することで圧縮を実行できます。

パラメータ

属性 説明 必須
destfile 作成する tar ファイル。 はい
basedir ファイルの tar を行うディレクトリ。 いいえ
longfile 長いファイル名(> 100 文字)の処理方法を決定します。許容される値は truncatefailwarnomitgnu、および posix です。 いいえ。デフォルトは warn
includes 含める必要があるファイルのパターンをコンマまたはスペースで区切ったリスト。 いいえ。デフォルトはすべて(**
includesfile ファイル名。このファイルの各行は、include パターンとして扱われます。 いいえ
excludes 除外する必要があるファイルのパターンをコンマまたはスペースで区切ったリスト。 いいえ。デフォルトはデフォルトの除外、またはdefaultexcludesno の場合はなし。
excludesfile ファイル名。このファイルの各行は、exclude パターンとして扱われます。 いいえ
defaultexcludes デフォルトの除外を使用するかどうかを示します(yes|no)。 いいえ。デフォルトは yes
compression 圧縮方法。許容される値は nonegzipxz、および bzip2 です。 いいえ。デフォルトは none
encoding tar ファイル内のファイル名に使用する文字エンコーディング。サポートされているエンコーディング のリストについては、こちらを参照してください。一般的に、tar形式は名前がシングルバイトエンコーディングを使用することを想定しており、ここでマルチバイトエンコーディングを指定すると、多くのtarツールで正しく展開できないアーカイブになる可能性があります。
Ant 1.9.5 以降
いいえ。デフォルトはデフォルトの JVM 文字エンコーディング

ネストされた要素として指定されたパラメータ

このタスクは、ネストされたtarfileset 要素をサポートしています。これらは拡張されたFileSetsであり、標準要素に加えて、追加の属性をサポートしています。

属性 説明 必須
preserveLeadingSlashes ファイル名の先頭の / を保持するかどうかを示します。 いいえ。デフォルトは false

その他のリソースコレクション

リソースコレクション は、アーカイブするファイルのグループを選択するために使用されます。

Apache Ant 1.7 より前は、ネストされた要素として<fileset>のみがサポートされていました。

htdocs/manual ディレクトリ内のすべてのファイルを ${dist} ディレクトリ内の manual.tar というファイルに tar 化し、次に gzip タスクを適用して圧縮します。

<tar destfile="${dist}/manual.tar" basedir="htdocs/manual"/>
<gzip destfile="${dist}/manual.tar.gz" src="${dist}/manual.tar"/>

htdocs/manual ディレクトリ内のすべてのファイルを ${dist} ディレクトリ内の manual.tar というファイルに tar 化します。mydocs ディレクトリ内のファイル、または todo.html という名前のファイルは除外されます。

<tar destfile="${dist}/manual.tar"
     basedir="htdocs/manual"
     excludes="mydocs/**, **/todo.html"/>

docs/readme.txt ファイルを /usr/doc/ant/README としてアーカイブに書き込みます。docs ディレクトリ内のすべての *.html ファイルには /usr/doc/ant がプレフィックスとして付けられます。たとえば、docs/index.html/usr/doc/ant/index.html としてアーカイブに書き込まれます。

<tar destfile="${basedir}/docs.tar">
  <tarfileset dir="${dir.src}/docs"
              fullpath="/usr/doc/ant/README"
              preserveLeadingSlashes="true">
    <include name="readme.txt"/>
  </tarfileset>
  <tarfileset dir="${dir.src}/docs"
              prefix="/usr/doc/ant"
              preserveLeadingSlashes="true">
    <include name="*.html"/>
  </tarfileset>
</tar>

長いパスに GNU 拡張機能を使用する tar を作成します。ここで、一部のファイルを executable(モード 755)としてマークし、残りのファイルはデフォルトモード(所有者による読み書き)を使用します。最初の fileset は、実行可能なファイルのみを選択します。2番目の fileset は、実行可能なファイルを exclude し、その他すべてのファイルを include する必要があります。

<tar longfile="gnu"
     destfile="${dist.base}/${dist.name}-src.tar">
  <tarfileset dir="${dist.name}/.." filemode="755" username="ant" group="ant">
    <include name="${dist.name}/bootstrap.sh"/>
    <include name="${dist.name}/build.sh"/>
  </tarfileset>
  <tarfileset dir="${dist.name}/.." username="ant" group="ant">
    <include name="${dist.name}/**"/>
    <exclude name="${dist.name}/bootstrap.sh"/>
    <exclude name="${dist.name}/build.sh"/>
  </tarfileset>
</tar>

tar タスクは、ファイルが1つのリソースコレクションによってのみ選択されることを保証しません。同じファイルが複数のコレクションによって選択されている場合、同じパスでtarファイルに2回含まれます。

include および exclude 要素のパターンは、他のすべての fileset と同様に、対応する dir 属性を基準とした相対パスと見なされます。上記の例では、${dist.name} は絶対パスではなく、ディレクトリの単純な名前であるため、${dist.name}${dist.name}/.. を基準とした有効な相対パスです。

ZIP アーカイブを GZip 圧縮された tar アーカイブとして再パッケージします。Unix ファイル権限が ZIP ファイルの一部として保存されている場合、それらは結果の tar アーカイブに保持されます。

<tar destfile="release.tar.gz" compression="gzip">
  <zipfileset src="release.zip"/>
</tar>

tar タスクは tar ファイルを作成しますが、既存の tar ファイルに追加しません。代わりに、既存の tar ファイルは置き換えられます。Ant のほとんどのタスクと同様に、このタスクは、出力ファイル(この場合は tar ファイル)が入力ファイルよりも古い場合、または出力ファイルが存在しない場合にのみ動作します。