マッピングファイル名

いくつかのタスクは、ソースファイルを受け取り、ターゲットファイルを作成します。タスクによっては、ターゲットファイルの名前が(javacを使用すると、.javaファイルに対して.classファイルが作成されることがわかるように)非常に明確な場合があります。他のケースでは、Apache Antを支援するため、または追加の機能を得るために、ターゲットファイルを指定したい場合があります。

ソースファイルは通常filesetとして指定されますが、ターゲットファイルを直接指定するのではなく、1つのソースファイルに対するターゲットファイルの検索方法をAntに指示します。 org.apache.tools.ant.util.FileNameMapperのインスタンスがこれを行います。これは、fromおよびto属性でパラメータ化できるルールに基づいてターゲットファイル名を構築します。正確な意味は実装に依存します。

これらのインスタンスは、次の属性を持つ<mapper>要素で定義されます。

属性 説明 必須
type 組み込みの実装の1つを指定します。 これらのうち1つのみ
classname クラス名で実装を指定します。
classpath classnameを検索するときに使用するクラスパス。 いいえ
classpathref 別の場所で定義されたパスへの参照として指定された、使用するクラスパス。 いいえ
from 指定された実装のfrom属性。 実装に依存
to 指定された実装のto属性。 実装に依存
refid このmapperを、別の場所で定義されたmapperへの参照にします。指定した場合、他の属性またはネストされた要素は許可されません。 いいえ

Antは、toおよびfrom属性の/または\文字を現在のプラットフォームの正しいディレクトリ区切り文字に自動的に変換しないことに注意してください。この区切り文字を指定する必要がある場合は、代わりに${file.separator}を使用してください。 regexpマッパーの場合、Windowsでは\文字であり、これは正規表現のエスケープ文字であるため、${file.separator}は機能しません。代わりにhandledirsep属性を使用する必要があります。

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

クラスパスは、ネストされた<classpath>(つまり、パスのような構造)を介して指定することもできます。

Ant 1.7.0以降、ネストされたファイルマッパーは、<mapper>要素または<typedef>で定義されたorg.apache.tools.ant.util.FileNameMapperの実装を介して提供できます。ネストされたファイルマッパーがいずれかの方法で指定された場合、マッパーは暗黙的に複合マッパーとして構成されます。

組み込みのマッパータイプ

すべての組み込みマッパーは大文字と小文字を区別します。

Ant 1.7.0以降、組み込みのマッパー実装タイプはそれぞれ、特定のタグ名を使用して直接アクセスできます。これにより、ファイル名マッパーは一般的に利用可能なtofromに加えて属性をサポートできます。
<mapper type|classname="...">の使用形式は、下位互換性のために有効なままです。

identity

ターゲットファイル名は、ソースファイル名と同じです。tofromの両方が無視されます。

<mapper type="identity"/>
<identitymapper/>
ソースファイル名 ターゲットファイル名
A.java A.java
foo/bar/B.java foo/bar/B.java
C.properties C.properties
Classes/dir/dir2/A.properties Classes/dir/dir2/A.properties

flatten

ターゲットファイル名は、先頭のディレクトリ情報がすべて削除された、ソースファイル名と同じです。tofromの両方が無視されます。

<mapper type="flatten"/>
<flattenmapper/>
ソースファイル名 ターゲットファイル名
A.java A.java
foo/bar/B.java B.java
C.properties C.properties
Classes/dir/dir2/A.properties A.properties

merge

ターゲットファイル名は、常にtoで定義されたものと同じになり、fromは無視されます。

<mapper type="merge" to="archive.tar"/>
<mergemapper to="archive.tar"/>
ソースファイル名 ターゲットファイル名
A.java archive.tar
foo/bar/B.java archive.tar
C.properties archive.tar
Classes/dir/dir2/A.properties archive.tar

glob

tofromの両方が必須であり、最大1つの*を含む可能性のあるパターンを定義します。fromパターンに一致する各ソースファイルについて、toパターンの*を、fromパターンの*に一致するテキストで置き換えることで、toパターンからターゲットファイル名が構築されます。fromパターンに一致しないソースファイル名は無視されます。

<mapper type="glob" from="*.java" to="*.java.bak"/>
<globmapper from="*.java" to="*.java.bak"/>
ソースファイル名 ターゲットファイル名
A.java A.java.bak
foo/bar/B.java foo/bar/B.java.bak
C.properties ignored
Classes/dir/dir2/A.properties ignored
<mapper type="glob" from="C*ies" to="Q*y"/>
<globmapper from="C*ies" to="Q*y"/>
ソースファイル名 ターゲットファイル名
A.java ignored
foo/bar/B.java ignored
C.properties Q.property
Classes/dir/dir2/A.properties Qlasses/dir/dir2/A.property

globmapperマッパーは、次の追加属性を受け取ることができます。

属性 説明 必須
casesensitive この属性はtrueまたはfalseにすることができます。これがfalseの場合、マッパーはグロブパターンと照合するときに大文字と小文字を区別しません。Ant 1.6.3以降 いいえ。デフォルトはtrueです
handledirsep この属性はtrueまたはfalseにすることができます。これを指定すると、マッパーは、通常のディレクトリ区切り文字である\/の違いを無視します。この属性は、クロスプラットフォームビルドファイルに役立ちます。Ant 1.6.3以降いいえ。デフォルトはfalseです

<pathconvert property="x" targetos="unix">
  <path path="Aj.Java"/>
  <mapper>
  <chainedmapper>
    <flattenmapper/>
    <globmapper from="a*.java" to="*.java.bak" casesensitive="no"/>
  </chainedmapper>
  </mapper>
</pathconvert>
<echo>x is ${x}</echo>

x is j.java.bakを出力し、

<pathconvert property="x" targetos="unix">
  <path path="d/e/f/j.java"/>
  <mapper>
    <globmapper from="${basedir}\d/e\*" to="*" handledirsep="yes"/>
  </mapper>
</pathconvert>
<echo>x is ${x}</echo>

x is f/j.javaを出力します。

regexp

tofromの両方が必須であり、正規表現を定義します。ソースファイル名(全体または一部)がfromパターンと一致する場合、ターゲットファイル名は、完全一致(\0)または括弧内の部分式の対応する一致に対する後方参照として、\0から\9を使用して、toパターンから構築されます。toパターンは全体のファイル名を決定するため、ファイルの拡張子を置き換えたい場合は、from="\.old$" to=".new"ではなく、from="(.*)\.old$" to="\1.new"を使用する必要があります(または、この場合はグロブマッパーを使用してください)。

fromパターンに一致しないソースファイルは無視されます。

Antでは、ドル記号($)を別のドル記号でエスケープする必要があることに注意してください。

Antでのgnu.regexpまたはgnu.rexの使用に関する情報については、この記事を参照してください。 異なる正規表現エンジンでは、結果が異なる可能性があることに注意してください。

java.util.regex以外の正規表現ライブラリのいずれかを使用する場合は、使用しているAntリリースから対応するant-[apache-oro, apache-regexp].jarも使用する必要があります。両方が同じクラスパスからロードされるようにしてください。つまり、それらをCLASSPATHANT_HOME/libディレクトリ、またはマッパーのネストされた<classpath>要素に入れる必要があります。ANT_HOME/libant-[apache-oro, apache-regexp].jarがあり、ライブラリがネストされた<classpath>にあるということはできません。

Antは、次のアルゴリズムに基づいて正規表現ライブラリを選択します。

<mapper type="regexp" from="^(.*)\.java$$" to="\1.java.bak"/>
<regexpmapper from="^(.*)\.java$$" to="\1.java.bak"/>
ソースファイル名 ターゲットファイル名
A.java A.java.bak
foo/bar/B.java foo/bar/B.java.bak
C.properties ignored
Classes/dir/dir2/A.properties ignored
<mapper type="regexp" from="^(.*)/([^/]+)/([^/]*)$$" to="\1/\2/\2-\3"/>
<regexpmapper from="^(.*)/([^/]+)/([^/]*)$$" to="\1/\2/\2-\3"/>
ソースファイル名 ターゲットファイル名
A.java ignored
foo/bar/B.java foo/bar/bar-B.java
C.properties ignored
Classes/dir/dir2/A.properties Classes/dir/dir2/dir2-A.properties
<mapper type="regexp" from="^(.*)\.(.*)$$" to="\2.\1"/>
<regexpmapper from="^(.*)\.(.*)$$" to="\2.\1"/>
ソースファイル名 ターゲットファイル名
A.java java.A
foo/bar/B.java java.foo/bar/B
C.properties properties.C
Classes/dir/dir2/A.properties properties.Classes/dir/dir2/A
<mapper type="regexp" from="^(.*?)(\$$[^/\\\.]*)?\.class$$" to="\1.java"/>
<regexpmapper from="^(.*?)(\$$[^/\\\.]*)?\.class$$" to="\1.java"/>
ソースファイル名 ターゲットファイル名
ClassLoader.class ClassLoader.java
java/lang/ClassLoader.class java/lang/ClassLoader.java
java\lang\ClassLoader$1.class java\lang\ClassLoader.java
java/lang/ClassLoader$foo$1.class java/lang/ClassLoader.java

regexpマッパーは、次の追加属性を受け取ることができます。

属性 説明 必須
casesensitive この属性はtrueまたはfalseにすることができます。これがfalseの場合、マッパーはパターンと照合するときに大文字と小文字を区別しません。Ant 1.6.3以降 いいえ。デフォルトはtrueです
handledirsep この属性はtrueまたはfalseにすることができます。これを指定すると、マッパーは、一致の目的のために、ファイル名の\文字を/として扱います。この属性は、クロスプラットフォームビルドファイルに役立ちます。Ant 1.6.3以降いいえ。デフォルトはfalseです

<pathconvert property="x" targetos="unix">
  <path path="Aj.Java"/>
  <chainedmapper>
    <flattenmapper/>
    <regexpmapper from="a(.*)\.java" to="\1.java.bak" casesensitive="no"/>
  </chainedmapper>
</pathconvert>
<echo>x is ${x}</echo>

x is j.java.bakを出力し、

<pathconvert property="hd.prop" targetos="windows">
  <path path="d\e/f\j.java"/>
  <chainedmapper>
    <regexpmapper from="${basedir}/d/e/(.*)" to="\1" handledirsep="yes"/>
  </chainedmapper>
</pathconvert>

hd.propf\j.javaに設定します。

package

グロブマッパーと同じ構文を共有するパッケージマッパーは、一致したソースパターンにあるディレクトリ区切り文字をターゲットパターンのプレースホルダーのドットで置き換えます。このマッパーは、<uptodate>および<junit>の出力と組み合わせて使用すると特に便利です。

tofromの属性はどちらも必須です。

<mapper type="package" from="*Test.java" to="TEST-*Test.xml"/>
<packagemapper from="*Test.java" to="TEST-*Test.xml"/>
ソースファイル名 ターゲットファイル名
org/apache/tools/ant/util/PackageMapperTest.java TEST-org.apache.tools.ant.util.PackageMapperTest.xml
org/apache/tools/ant/util/Helper.java ignored

unpackage

Ant 1.6.0以降

このマッパーは、パッケージマッパーの逆です。パッケージ名のドットをディレクトリ区切り文字に置き換えます。これは、JUnitテストのテストケースに対してXMLフォーマッタの結果を照合するのに役立ちます。マッパーは、グロブマッパーと同じサンプル構文を共有します。

tofromの属性はどちらも必須です。

<mapper type="unpackage" from="TEST-*Test.xml" to="${test.src.dir}/*Test.java">
<unpackagemapper from="TEST-*Test.xml" to="${test.src.dir}/*Test.java">
ソースファイル名 ターゲットファイル名
TEST-org.acme.AcmeTest.xml ${test.src.dir}/org/acme/AcmeTest.java

composite

Ant 1.7.0以降

このマッパーの実装には、複数のネストされたマッパーを含めることができます。ファイルマッピングは、ソースファイル名を各ネストされた<mapper>に順番に渡し、すべての結果を返すことによって実行されます。tofromの属性は無視されます。

Ant 1.8.0以降、マッピングされた結果の順序は、ネストされたマッパーの順序と同じです。Ant 1.8.0より前の順序は未定義でした。

<compositemapper>
  <identitymapper/>
  <packagemapper from="*.java" to="*"/>
</compositemapper>
ソースファイル名 ターゲットファイル名
foo/bar/A.java foo/bar/A.java
foo.bar.A

複合マッパーには、対応する<mapper>type属性はありません。

chained

Ant 1.7.0以降

このマッパーの実装には、複数のネストされたマッパーを含めることができます。ファイルマッピングは、ソースファイル名を最初のネストされたマッパーに渡し、その結果を2番目のマッパーに渡し、というように実行されます。最後のネストされたマッパーによって生成されたターゲットファイル名が、マッピング操作の最終的な結果を構成します。tofromの属性は無視されます。

<chainedmapper>
  <flattenmapper/>
  <globmapper from="*" to="new/path/*"/>
  <mapper>
    <globmapper from="*" to="*1"/>
    <globmapper from="*" to="*2"/>
  </mapper>
</chainedmapper>
ソースファイル名 ターゲットファイル名
foo/bar/A.java new/path/A.java1
new/path/A.java2
boo/far/B.java new/path/B.java1
new/path/B.java2

連結マッパーには、対応する<mapper>type属性はありません。

filtermapper

Ant 1.6.3以降

このマッパーの実装は、ソースファイル名にフィルターチェーンを適用します。

<filtermapper>
  <replacestring from="\" to="/"/>
</filtermapper>
ソースファイル名 ターゲットファイル名
foo\bar\A.java foo/bar/A.java
<filtermapper>
  <scriptfilter language="beanshell">
    self.setToken(self.getToken().toUpperCase());
  </scriptfilter>
</filtermapper>
ソースファイル名 ターゲットファイル名
foo\bar\A.java FOO\BAR\A.JAVA

フィルターマッパーには、対応する<mapper>type属性はありません。

scriptmapper

Ant 1.7以降

このマッパーは、Apache BSFまたはJSR 223でサポートされている言語で記述されたスクリプトを、マッピングするファイルごとに1回実行します。

スクリプトは、インラインで宣言することも、指定されたファイルで宣言することもできます。

スクリプトと依存関係の説明については、Scriptタスクを参照してください。

属性 説明 必須
language スクリプト言語 はい
manager 使用するスクリプトエンジンマネージャー。この属性の使用については、scriptタスクを参照してください。 いいえ。デフォルトはautoです
src スクリプトを含むファイル いいえ
encoding ファイルとしてのスクリプトのエンコーディング。Ant 1.10.2以降 いいえ。デフォルトはデフォルトのJVM文字エンコーディングです
setbeans すべてのプロパティ、参照、およびターゲットをスクリプト内のグローバル変数にするかどうか。Ant 1.8.0以降 いいえ。デフォルトはtrueです
classpath スクリプトに渡すクラスパス。 いいえ
classpathref 別の場所で定義されたパスへの参照として指定された、使用するクラスパス。いいえ

このファイル名マッパーは、ネストされた<classpath>要素を受け取ることができます。この要素の使用方法については、scriptタスクを参照してください。

<scriptmapper language="javascript">
  self.addMappedName(source.toUpperCase());
  self.addMappedName(source.toLowerCase());
</scriptmapper>
ソースファイル名 ターゲットファイル名
foo\bar\A.java FOO\BAR\A.JAVA
foo\bar\a.java

このマッパーを使用するには、スクリプトがソースファイルにアクセスでき、複数のマッピングを返すことができる必要があります。関連するBeanとそのメソッドを次に示します。スクリプトはソースファイルごとに1回呼び出され、マップされた名前のリストは呼び出しごとにリセットされます。

スクリプトBean 説明
source: String マップするファイル/パス
self scriptmapper自体
self.addMappedName(String name) 新しいマッピングを追加します
self.clear() ファイルのリストをリセットします

scriptmapperには、対応する<mapper>type属性はありません。

firstmatchmapper

Ant 1.8.0以降

このマッパーは、任意の数のネストされたマッパーをサポートし、最初に一致したマッパーの結果を返します。これは、一致するすべての子の結果を収集するコンポジットマッパーとは異なります。

<firstmatchmapper>
  <globmapper from="*.txt" to="*.bak"/>
  <globmapper from="*A.*" to="*B.*"/>
</firstmatchmapper>
ソースファイル名 ターゲットファイル名
foo/bar/A.txt foo/bar/A.bak
foo/bar/A.java foo/bar/B.java

firstmatchmapper には、対応する <mapper> type 属性はありません。

cutdirsmapper

Ant 1.8.2 以降

このマッパーは、設定された数の先頭ディレクトリをソースファイル名から削除します。

<cutdirsmapper dirs="1"/>
ソースファイル名 ターゲットファイル名
foo/bar/A.txt bar/A.txt

cutdirsmapper には、対応する <mapper> type 属性はありません。

属性 説明 必須
dirs 削除するディレクトリの数(正の数である必要があります)。 はい