java - 如何为 Ant 任务创建嵌套元素?

标签 java ant build task

是否可以为任何 ant 任务创建嵌套元素。例如

<copy todir="../backup/dir">
    <fileset dir="src_dir"/>
    <filterset>
      <filter token="TITLE" value="Foo Bar"/>
    </filterset>
</copy>

这里对于任务copy,我们将嵌套元素作为filterset。现在,我想为任务 copy 创建自己的嵌套元素 encryptfilterset

<copy todir="../backup/dir">
    <fileset dir="src_dir"/>
    <encryptfilterset>
      <filter token="TITLE" value="Foo Bar"/>
    </encryptfilterset>
</copy>

我们该怎么做?

最佳答案

我们必须扩展现有任务以创建 CustomTask,现在支持自定义嵌套元素 XYZ 在您的新类中创建一个方法

public XYZ createXYZ();
或者
public void addXYZ(XYZ obj)
或者
public void addXYZ(XYZ obj)

<taskdef name="CustomTask" classname="com.ant.task.Customtask">
        <classpath>
            <path location="lib/"/>         
        </classpath>
    </taskdef>

<typedef name="XYZ" classname="com.ant.type.XYZ" >
        <classpath>
            <path location="lib/"/>
        </classpath>
    </typedef>


    <target name="MyTarget" >
            <CustomTask>
                <XYZ></XYZ>
            </CopyEncrypted>
        </target>

所以我的文件看起来像:-

public class CopyEncrypted extends Copy {   

    public EncryptionAwareFilterSet createEncryptionAwareFilterSet()
    {       
        EncryptionAwareFilterSet eafilterSet = new EncryptionAwareFilterSet();      
        getFilterSets().addElement( eafilterSet );      
        return eafilterSet;
    }   
}


public class EncryptionAwareFilterSet extends FilterSet{

    @Override
    public synchronized void readFiltersFromFile(File file)
            throws BuildException {
        log("EncryptionAwareFilterSet::reading filters",0);
        super.readFiltersFromFile(file);

        Vector<Filter> filts = getFilters();
        for (Iterator iterator = filts.iterator(); iterator.hasNext();) {
            Filter filter = (Filter) iterator.next();
            if ( filter.getToken().equalsIgnoreCase( "PASSWORD" ) ){
                filter.setValue( Encryptor.getEncryptedValue ( filter.getValue() )  );
            }
        }   
    }
}

build.xml

<target name="encrypted-copy" >
        <CopyEncrypted todir="dist/xyz/config" overwrite="true">
            <fileset dir="config"/>                 
            <encryptionAwareFilterSet>
                <filtersfile file="conf/properties/blah-blah.properties" />
            </encryptionAwareFilterSet>
        </CopyEncrypted>
    </target>

关于java - 如何为 Ant 任务创建嵌套元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3657910/

相关文章:

java.lang.VerifyError : Expecting a stackmap frame at branch target 错误

java - Ant 不构建第二个 jar

java - 捆绑的可执行 jar 文件 - 找不到主类

asp.net-mvc - 加速visual studio 2010构建asp.net mvc

linux - 安装 Linux 内核产生 "gzip: stdout: No space left on device"错误

c++ - 避免 VC++ 中的中间目录

java - 迁移到 AndroidX 后如何更新所有库?

java - 使用 JSoup 从 HTML 中提取 <data-id >

java - couchbase 中文档类型和键值类型的区别

java - 如何摆脱 XXX 自动生成的方法 stub