Antの自作タスクでセレクターを扱うクラス。
すなわち、属性のinclude・excludeやネストできる要素のinclude・exclude等を扱えるようにするTaskクラス。
delete・fixcrlf・native2ascii・javac・jar・war・ear等のタスク
はMatchingTaskを使って作られている。
include・exclude等の属性・要素が自動的にセットされる。ファイル一覧の取得方法自体はFileSetとほぼ同一。
ベースとなるディレクトリーだけは別の方法で(自分で)セットできるようにする必要がある。
独自タスク.java:
mport java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.MatchingTask;
public class 独自タスク extends MatchingTask { protected File dir; public void setDir(File dir) { this.dir = dir; }
@Override
public void execute() throws BuildException {
validate();
DirectoryScanner ds = super.getDirectoryScanner(dir);
String[] files = ds.getIncludedFiles();
for (int i = 0; i < files.length; i++) {
File f = new File(ds.getBasedir(), files[i]);
execute(f); //個別ファイルの処理
}
}
protected void validate() throws BuildException {
if (this.dir == null) {
throw new BuildException("dir attribute must be set.");
}
}
/** * ファイル処理 * @param f ファイル * @throws BuildException */ protected void execute(File f) throws BuildException { log(f.getAbsolutePath(), Project.MSG_INFO); 〜 } }
DirectoryScannerを取得した後は、FileSetの使い方と全く同じ。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="MatchingTask-sample" basedir=".." default="match-test"> <target name="match-test"> <taskdef name="match" classname="jp.hishidama.sample.ant.MatchTask1" classpath="classes" /> <match dir="c:\temp"> <include name="**/*.txt" /> </match> </target> </project>