Ant loadfile覆盖属性

时间:2011-03-18 22:43:58

标签: variables ant properties flaka

我正在尝试在循环中使用Ant任务<loadfile>来解析文件的内容。我有类似

的东西
<loadfile srcFile="@{some.input}" property="my.property">

由于Ant属性是不可变的,因此这对我不起作用。我需要'my.property'来更新每次迭代。有没有办法实现这个目标?我知道Ant-contrib有一个<var>任务,但我不确定如何使用<loadfile>

有什么建议吗?

感谢。

7 个答案:

答案 0 :(得分:6)

<loadfile property="foo" srcfile="bar.txt"/>

 ... do some actions, perhaps in a <for> loop ...

<var name="foo" unset="true"/>

然后,您可以在foo

中再次使用<loadfile>

答案 1 :(得分:1)

Ant contrib也有一个取消设置的var任务。

运气:通常接受其中一个答案,以便人们知道问题已经解决。我建议你接受吉尔伯特,因为他先发布了正确答案。

答案 2 :(得分:1)

其中一个能够覆盖属性值的内置任务是script

下面是一个脚本和输出,证明属性值已更改。

<project name="test">
  <property name="bshJar" value="C:\lang\java\bsh-1.3.0.jar:C:\lang\java\bsf.jar:C:\lang\java\commons-logging-1.1.1.jar" />
  <property name="a" value="first" />
  <echo>a=${a}</echo>
  <script manager="bsf" language="beanshell" classpath="${bshJar}"><![CDATA[
  project.setProperty("a", "fourth");
  ]]></script>
  <echo>a=${a}</echo>
</project>

输出:

a=first
a=fourth

答案 3 :(得分:0)

我刚刚使用了Antelope提供的<unset>任务 http://antelope.tigris.org/

答案 4 :(得分:0)

Ant plugin Flaka提供了一个let任务,允许覆盖现有的属性或变量,如=

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

<property name="my.property" value="value"/>
<fl:let> my.property ::= 'anothervalue'</fl:let>

</project>

所以不需要先取消设置然后再设置。顺便说一句。 Flaka也有一个未设置的任务; - )

答案 5 :(得分:0)

您是否在ANT中尝试过该脚本。

<script language="javascript">
project.setProperty("my.property", "somevalue");
</script>

答案 6 :(得分:0)

您可以在MacroDef中为每个srcFile创建一个新属性:

<loadfile srcFile="@{some.input}" property="@{some.input}_Prop">

<echo message="@{some.input} Contents: ${@{some.input}_Prop}"/>