假设我有一个像这样的macrodef
<macrodef name="Test">
<element name="someName"/>
<sequential>
<java classname="path_to_Test">
<classpath> blah </classpath>
<arg value="someText and {valueOfsomeName}"/>
</java>
</sequential>
</macrodef>
然后进一步向下,我有一个使用此macrodef的目标,例如
<target name="testMacrodef">
<Test>
<someName value="someValue"/>
</Test>
</target>
我的问题是,如何使
{valueOfsomeName}
精确地等于字符串someValue
?我似乎根本无法使用它。另外,仅出于上下文考虑,我不能仅使用属性标签代替元素标签,因为我需要将其作为可选参数。
我已经搜索Google很久了,试图为此找到解决方案。也许没有。但是据我所知,没有人问过这个问题,而且在Ant文档中似乎也没有很好地解决这个问题,因此,如果不可能的话,有没有办法提供可选属性?
编辑:拼写
最佳答案
如果element仅具有文本内容,则使用简单的echo。 :
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echo>
<someName/>
</echo>
<echo> @@{foo} => @{foo}</echo>
</sequential>
</macrodef>
<Test>
<someName>blablabla..</someName>
</Test>
输出:
[echo]
[echo] blablabla..
[echo] @{foo} => bar
否则,对于嵌套的xml内容,请使用echoxml。 :
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echoxml>
<someName/>
</echoxml>
<echo> @@{foo} => @{foo}</echo>
</sequential>
</macrodef>
<Test>
<someName>
<echo>blablabla..</echo>
</someName>
</Test>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<echo>blablabla..</echo>
[echo] @{foo} => bar
如果需要元素值进行进一步处理,请使用echo / echoxml进行文件处理,然后使用loadfile进行处理。
-评论后编辑-
回显文件:
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echo file="somefile.txt">
<someName/>
</echo>
<echo> @@{foo} => @{foo}</echo>
</sequential>
要么
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echoxml file="somefile.txt">
<someName/>
</echoxml>
<echo> @@{foo} => @{foo}</echo>
</sequential>
然后使用loadfile =>创建具有内容的属性(=字符串)。
当使用带有filterchain的xml标头的echoxml条时:
<loadfile srcfile=" ... " property="whatever">
<filterchain>
<headfilter lines="10" skip="1"/>
</filterchain>
</loadfile>
根据您的需要调整headfilter lines属性的值。
财产将具有以下价值:
<echo>blablabla..</echo>