いくつかのタスクは、ソースファイルを受け取り、ターゲットファイルを作成します。タスクによっては、ターゲットファイルの名前が(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以降、組み込みのマッパー実装タイプはそれぞれ、特定のタグ名を使用して直接アクセスできます。これにより、ファイル名マッパーは一般的に利用可能なtoとfromに加えて属性をサポートできます。<mapper type|classname="...">の使用形式は、下位互換性のために有効なままです。
ターゲットファイル名は、ソースファイル名と同じです。toとfromの両方が無視されます。
<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 |
ターゲットファイル名は、先頭のディレクトリ情報がすべて削除された、ソースファイル名と同じです。toとfromの両方が無視されます。
<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 |
ターゲットファイル名は、常に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 |
toとfromの両方が必須であり、最大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を出力します。
toとfromの両方が必須であり、正規表現を定義します。ソースファイル名(全体または一部)が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も使用する必要があります。両方が同じクラスパスからロードされるようにしてください。つまり、それらをCLASSPATH、ANT_HOME/libディレクトリ、またはマッパーのネストされた<classpath>要素に入れる必要があります。ANT_HOME/libにant-[apache-oro, apache-regexp].jarがあり、ライブラリがネストされた<classpath>にあるということはできません。
Antは、次のアルゴリズムに基づいて正規表現ライブラリを選択します。
ant.regexp.matcherimplが設定されている場合は、使用するorg.apache.tools.ant.util.regexp.RegexpMatcherを実装するクラスの名前として取得されます。java.util.regexパッケージのデフォルトを使用します。<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.propをf\j.javaに設定します。
グロブマッパーと同じ構文を共有するパッケージマッパーは、一致したソースパターンにあるディレクトリ区切り文字をターゲットパターンのプレースホルダーのドットで置き換えます。このマッパーは、<uptodate>および<junit>の出力と組み合わせて使用すると特に便利です。
toとfromの属性はどちらも必須です。
<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 |
Ant 1.6.0以降
このマッパーは、パッケージマッパーの逆です。パッケージ名のドットをディレクトリ区切り文字に置き換えます。これは、JUnitテストのテストケースに対してXMLフォーマッタの結果を照合するのに役立ちます。マッパーは、グロブマッパーと同じサンプル構文を共有します。
toとfromの属性はどちらも必須です。
<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 |
Ant 1.7.0以降
このマッパーの実装には、複数のネストされたマッパーを含めることができます。ファイルマッピングは、ソースファイル名を各ネストされた<mapper>に順番に渡し、すべての結果を返すことによって実行されます。toとfromの属性は無視されます。
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属性はありません。
Ant 1.7.0以降
このマッパーの実装には、複数のネストされたマッパーを含めることができます。ファイルマッピングは、ソースファイル名を最初のネストされたマッパーに渡し、その結果を2番目のマッパーに渡し、というように実行されます。最後のネストされたマッパーによって生成されたターゲットファイル名が、マッピング操作の最終的な結果を構成します。toとfromの属性は無視されます。
<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属性はありません。
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属性はありません。
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属性はありません。
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 属性はありません。
Ant 1.8.2 以降
このマッパーは、設定された数の先頭ディレクトリをソースファイル名から削除します。
<cutdirsmapper dirs="1"/>
| ソースファイル名 | ターゲットファイル名 |
|---|---|
foo/bar/A.txt |
bar/A.txt |
cutdirsmapper には、対応する <mapper> type 属性はありません。
| 属性 | 説明 | 必須 |
|---|---|---|
| dirs | 削除するディレクトリの数(正の数である必要があります)。 | はい |