自定义Condition
编写自定义的condition,可以实现自定义的条件判断逻辑,需要实现org.apache.tools.ant.taskdefs.condition.Condition接口,只有一个必须实现的方法就是eval,用于返回条件判断结果。
比如:实现一个用于判断一个字符串是否全部大写的Condition。
步骤:
1.新建Java工程
2.引入ant库
ant相关的jar就在apache-ant-1.9.4\lib目录下。在Java工程中新建一个libs目录,把jar包都拷贝到libs下,选中所有jar,右键Build Path——Add To Build Path,就完成了ant库的引入。
3.自定义Condition条件判断类
package linchaolong.ant.condition;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.condition.Condition;
// 用于判断字符串是否全部是大写
public class UppoerCondition implements Condition{
private String value;
// 定义一个setter方法,用于设置value的值
public void setValue(String value){
this.value = value;
}
//Is this condition true?,条件是否成立的判定方法
@Override
public boolean eval() throws BuildException {
// 如果未设置value属性,抛出异常
if (value == null) {
throw new BuildException("value attribute is not set");
}
// 判断字符串是否大写
return value.toUpperCase().equals(value);
}
}
4.使用自定义类
<project name="test" default="run">
<target name="run">
<!-- 自定义类型 -->
<typedef
name="isupper"
classname="linchaolong.ant.condition.UppoerCondition"
classpath="./../bin"/><!-- 我这里把工程bin目录添加到类路径 -->
<!-- 在condition中使用自定义标签 -->
<condition property="isUpper">
<isupper value="THIS IS ALL UPPER CASE"/> <!-- 如果条件成立,则定义isUpper属性,而值为true -->
</condition>
<!-- 打印属性值 -->
<echo>result : ${isUpper}</echo>
<antcall target="result" />
</target>
<target name="result" if="${isUpper}">
<echo>is all uppper</echo>
</target>
</project>
打印结果:
自定义选择器
FilenameSelector
通过自定义选择器可以实现自定义的文件过滤规则。需要继承org.apache.tools.ant.types.selectors.FilenameSelector,并重写isSelected方法。
示例:
package linchaolong.ant.selector;
import java.io.File;
import org.apache.tools.ant.BuildException;
import org.apache.tools.a