Apache Ant自定義元件


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>