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>