Ant 自定义组件

 

Ant允许我们根据需要创建定制组件。自定义组件可以是条件,过滤器,选择器等,并且在ant核心api外部定义。

自定义组件的行为类似于Ant核心组件。

自定义组件是正常的可以实现类和接口的Java类。看起来就像编写一个自定义任务,该任务通过setter和getter方法定义属性。

<typedef> 元素用于将自定义组件实现到Ant核心中。

 

创建自定义组件

这是一个分为三个阶段的过程。首先创建一个Java类,然后定义<typedef>元素,然后在构建文件中使用它。

 

示例

为条件创建Java类。

package com.codebaoku;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.condition.Condition;
public class AllUpperCaseCondition implements Condition {
    private String value;
    // The setter for the "value" attribute
    public void setValue(String value) {
        this.value = value;
    }
    // this method evaluates the condition
    public boolean eval() {
        if (value == null) {
            throw new BuildException("value attribute is not set");
        }
        return value.toUpperCase().equals(value);
    }
}

现在通过指定Java类来定义<typedef>。

<typedef name="alluppercase" classname="com.codebaoku.AllUpperCaseCondition"
                 classpath="test.com.codebaoku"/>

这样做,我们成功创建了一个自定义元素 ,该元素可以在我们的项目中进一步使用。请参阅build.xml文件。

//build.xml

<project name="java-ant project" default="abc">    
    <typedef name="alluppercase" classname="com.codebaoku.AllUpperCaseCondition"
                 classpath="test.com.codebaoku"/>
    <target name="abc" >
        <condition property="allupper">
            <alluppercase value="this IS ALL UPPER CASE"/>
        </condition>  
    </target>
</project>

 

自定义选择器

在上面的示例中,我们创建了一个自定义条件元素。现在,我们将创建一个自定义选择器。选择器是数据类型,要创建自定义选择器,必须实现

org.apache.tools.ant.types.selectors.FileSelector接口。此接口具有一个必须重写的方法isSeletected(基于文件的File,字符串文件名,文件文件)。自定义选择器的示例如下。

//Java类

package com.codebaoku;
import java.io.File;
import org.apache.tools.ant.types.selectors.FileSelector;
public class JavaSelector implements FileSelector {
    public boolean isSelected(File b, String filename, File f) {
        return filename.toLowerCase().endsWith(".java");
    }
}

//类型定义

<typedef name="javaselector" classname="com.codebaoku.JavaSelector"
            classpath="test"/>

//build.xml

<project name="java-ant project" default="abc">    
    <target name="abc">
        <typedef name="javaselector" classname="com.codebaoku.JavaSelector"
            classpath="test"/>
        <copy todir="destdir">
            <fileset dir="src">
                <javaselector/>
            </fileset>
        </copy>
    </target>
</project>

就像,我们也可以创建自定义过滤器。

 此功能使我们能够在执行过程中监视Ant的进度。 Ant使用两个概念进行监视: Listener和Logger,两者均由Ant本身提供。请参阅下面所有受支持的侦听器。 Listeners开始构建构建完成ta ...