如何将字符串附加到ant中的属性?

时间:2012-02-09 07:49:24

标签: string ant

我正在使用ANT 1.7.0

我想创建一个调用的目标,将文本附加到字符串(保存在属性中)。

例如:

<property name="str.text" value="" />

<target name="append.to.property" >
  <property name="temp.text" value="${str.text}${new.text}" />
  <property name="str.text" value="${temp.text}" />
</target>

问题是我无法覆盖一个目标中的属性值并读取另一个目标中的更改值。

如何将字符串附加到ant?

中的属性

3 个答案:

答案 0 :(得分:12)

您无法更改Ant中的属性值。

您可以使用提供可变属性的Ant Contrib变量任务(请参阅http://ant-contrib.sourceforge.net/tasks/tasks/variable_task.html)。

<property name="str.text" value="A" />
<property name="new.text" value="B"/>

<target name="append.to.property" >
  <var name="temp.text" value="${str.text}${new.text}" />
  <var name="str.text" value="${temp.text}" />
</target>

<target name="some.target" depends="append.to.property">
  <echo message=${str.text}/>
</target>

答案 1 :(得分:1)

通常,ant中的属性一旦设置就不可变。 使用Ant addon Flaka,您可以更改或覆盖现有属性 - 甚至是userproperties(通过命令行-Dkey = value设置的属性),即创建一个macrodef并使用它:

<project name="demo" xmlns:fl="antlib:it.haefelinger.flaka">

 <property name="foo" value="bar"/>

 <macrodef name="createproperty">
    <attribute name="outproperty"/>
    <attribute name="input"/>
    <sequential>
     <fl:let> @{outproperty} ::= '@{input}'</fl:let>
    </sequential>
 </macrodef>

 <!-- create new property -->
 <createproperty input="${foo}bar" outproperty="fooo"/>

    <echo>$${fooo} => ${fooo}</echo>

    <echo>1. $${foo} => ${foo}</echo> 

 <!-- overwrite existing property -->
 <createproperty input="foo${foo}" outproperty="foo"/>

    <echo>2. $${foo} => ${foo}</echo>

</project>


输出
 [echo] ${fooo} => barbar
 [echo] 1. ${foo} => bar
 [echo] 2. ${foo} => foobar

或者你可以使用一些脚本语言(Groovy,Javascript,JRuby ..)并使用ant api:
project.setProperty(String name, String value)来覆盖属性。

答案 2 :(得分:0)

如果您想在现有属性值中附加字符串,请按照以下步骤操作。

  1. 我们需要加载我们需要更改其中的值的属性文件。
  2. 使用ANT属性任务从temp属性中的文件中获取现有属性值。
  3. 然后执行更改Property值的正常过程。
  4. 1 Property file 1 2 string to append 3 ANT Script 4 Final Property value

    供参考:Wordpress Link