当前位置: 首页 > 教程 > ANT >

Apache Ant自定义组件

精华
小牛编辑
98浏览
2023-03-14

Ant允许根据的要求创建自定义组件。 自定义组件可以是条件,过滤器,选择器等,并在ant核心api之外定义。

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

自定义组件是可以实现类和接口的普通Java类。 它看起来像编写一个自定义任务,通过settergetter方法定义属性。

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

1. 创建自定义组件

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

示例

为条件创建Java类。参考以下代码:

package com.yiibai;  
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.yiibai.AllUpperCaseCondition"  
                 classpath="test.com.yiibai"/>

通过这样做,已经成功创建了一个自定义元素<alluppercase>,它可以在项目中进一步使用。 请参阅build.xml文件。

文件:build.xml -

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

2. 自定义选择器

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

org.apache.tools.ant.types.selectors.FileSelector接口。 此接口具有单个方法isSeletected(File basedir,String filename,File file),必须重写该方法。 下面给出了自定义选择器的示例。

Java类

package com.yiibai;  
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.yiibai.JavaSelector"  
            classpath="test"/>

文件:build.xml -

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