S-JIS[2009-01-17] 変更履歴

MatchingTaskクラス

Antの自作タスクでセレクターを扱うクラス。
すなわち、属性のinclude・excludeやネストできる要素のinclude・exclude等を扱えるようにするTaskクラス
deletefixcrlfnative2asciijavacjarwarear等のタスク は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の使い方と全く同じ。


build.xml:

<?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>

独自タスクの作り方へ戻る / Ant目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま