Java 如何为ant任务创建嵌套元素?
是否可以为任何ant任务创建嵌套元素。例如Java 如何为ant任务创建嵌套元素?,java,ant,build,task,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 todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Foo Bar"/>
</filterset>
</copy>
对于任务copy,我们将嵌套元素设置为filterset。现在,我想为任务复制创建自己的嵌套元素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)
所以我的文件看起来像:-
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() ) );
}
}
}
}
公共类CopyEncrypted扩展副本{
公共加密WareFilterSet CreateEncryptionWareFilterSet()
{
EncryptionWareFilterSet eafilterSet=新的EncryptionWareFilterSet();
getFilterSets().addElement(EAFilterSets);
返回eafilterSet;
}
}
公共类EncryptionWareFilterSet扩展了FilterSet{
@凌驾
公共同步的无效readFiltersFromFile(文件文件)
抛出构建异常{
日志(“EncryptionWareFilterSet::reading filters”,0);
super.readFiltersFromFile(文件);
向量filters=getFilters();
for(Iterator Iterator=filts.Iterator();Iterator.hasNext();){
过滤器过滤器=(过滤器)迭代器。下一步();
if(filter.getToken().equalsIgnoreCase(“密码”)){
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>
macrodef不是嵌套元素。
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() ) );
}
}
}
}
<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>