3

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

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

由于 Ant 属性是不可变的,所以这对我不起作用。我需要'my.property' 来更新每次迭代。有没有办法做到这一点?我知道 Ant-contrib 有一个<var>任务,但我不知道如何使用<loadfile>它。

有什么建议吗?

谢谢。

4

7 回答 7

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

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

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

然后你可以foo再次使用<loadfile>

于 2011-06-07T22:30:02.093 回答
1

Ant contrib 还有一个未设置的 var 任务。

幸运:接受其中一个答案是惯例,这样人们就知道问题已经解决了。我建议您接受吉尔伯特的,因为他首先发布了正确的答案。

于 2011-03-21T01:41:19.550 回答
1

Ant 插件 Flaka提供了一个 let 任务,允许像这样覆盖现有的属性或变量 =

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

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

</project>

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

于 2011-03-19T22:50:22.577 回答
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
于 2012-05-23T10:01:17.250 回答
0

您是否尝试过 ANT 中的脚本。

<script language="javascript">
project.setProperty("my.property", "somevalue");
</script>
于 2013-05-22T11:25:34.640 回答
0

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

于 2011-03-19T00:07:55.720 回答
0

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

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

<echo message="@{some.input} Contents: ${@{some.input}_Prop}"/>
于 2013-08-12T14:46:34.160 回答