2011-03-18 100 views
4

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

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

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

任何建议?

谢谢。

+0

不太您的问题,而是:令人惊讶的在我的ENV(蚂蚁1.9.4)**'<研究loadFile SRC = “......”encoding =“...”/>'确实重写了一个在其内部定义了两次的属性** :-(不幸的是,这导致了一些针对测试系统的prod更改!显然在同一个文件中重写作为默认设置: -/ – 2018-02-15 08:43:02

回答

0

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

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

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

</project> 

所以没必要取消设置首先,然后设置。顺便说一句。 Flaka还有一个未设置的任务;-)

1

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

Lucks:按照约定接受其中一个答案,以便人们知道问题已解决。我建议你接受吉尔伯特,因为他首先发布正确的答案。

+0

在过去,我使用Antcontrib很多,但因为它的开发似乎已经死了 - 最后一次在2006年发布 - 我搜索了一个类似的工具,发现了Ant Flaka(http:// code .google.com/p/flaka /) 。 Flaka有一些非常创新的功能,f.e.类似于JSF/JSP的表达式语言 – Rebse 2011-03-21 19:00:38

+0

正如我的问题中所述,我不确定如何使用任务与 lucks 2011-03-22 16:30:20

+0

您可以使用var/unset在再次调用loadfile之前取消设置属性。 – 2011-03-23 02:58:36

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

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

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

然后,您可以在<loadfile>

+3

澄清var任务是在AntContrib的东西,它与标准属性一起工作。 – 2011-12-26 23:23:03

+0

这工作得很好!我在''之前放置了''元素,每次都有效。基本上使属性可变。需要的时候很棒!在''操作中使用它。 – SliverNinja 2014-10-22 18:38:11

1

其中之一是能够覆盖的属性值是script内置的任务再次使用foo

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

<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 
0

你尝试在ANT脚本。

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

你可以为每个SRCFILE创建您的MacroDef一个新的属性:

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

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