在ant-contrib中增加整数



我需要一些帮助。我有一个目标,我在其中循环使用foreach从ant-contrib文件集。对于循环的每次迭代,我调用另一个目标(让它称为doStuff)。

doStuff的输出是我想要存储在文件中的东西。我希望文件具有唯一的名称,并且我认为每次循环递增的整数会很适合我。

我尝试了下面代码的许多变体,但没有成功。我可能还没有理解。它似乎与不可变属性一起工作,使目标无状态。虽然我很喜欢,但这对我目前的问题没有帮助。

是否有办法在第一个目标中设置myInt并保持"状态",在每个循环中增加它并将其传递给下一个目标?

<var name="myInt"  unset="true"/>
<var name="myInt" value="0"/>
<target name="default">
    <foreach target="doStuff" param="theFile">
        <fileset dir="" casesensitive="yes">
            <depth max="0"/>
        </fileset>
    </foreach>
</target>
<target name="doStuff"  description="Make output directories and run the MXUnit task">
    <var name="op1" value="${myInt}"/>
    <var name="op2" value="1"/>
    <var name="op" value="+"/>
    <math result="result" operand1="${op1}" operation="${op}" operand2="${op2}" datatype="int"/>
    <var name="myInt" unset="true"/>
    <var name="myInt" value="${result}"/>  
<!-- Here I save the file with the name ${result}-->
</target>

首先,一个建议:考虑是否真的有必要使用自增整数——如果你只是想要一个唯一的、可排序的文件名,你可以使用<tstamp>代替


这部分应该被认为是使用Ant的一个坏习惯

从你的描述中,我看不出你的"测试"目标是如何被称为的。所以我假设你只是想让你的"doStuff"在每次被调用时使用一个自增整数。

您可以尝试<script>(下面的示例代码未测试):

<target name="default">
    <script language="beanshell" classpathref="your-classpath-ref-id">
        String[] theFiles = getProject().getProperty("theFile").split(",");
        for (int i = 1; i &lt;= theFiles.length; i++) {
            CallTarget antcall = new CallTarget(); // the class of antcall task
            antcall.setTarget("doStuff");
            Property param1 = antcall.createParam();
            param1.setName("number");
            param1.setValue(String.valueOf(i));
            ... // maybe param2 to pass theFiles[i] to doStuff?
            antcall.execute();
        }
    </script>
</target>

如果beanshell的依赖库不在Ant的默认类路径中,你需要在你的类路径中包含jar, id为"your-classpath-ref-id"。


请看David W对这个问题的回答:蚂蚁-我如何运行相同的取决于从多个目标。这个答案很好地说明了Ant到底是什么——不是编程语言,而是矩阵依赖语言

在循环中使用自增int是全功能编程语言的一个特性。如果确实需要,可以开发Ant-contrib之类的库来提供这样的功能。但是,我仍然更喜欢时间戳而不是整数。当您将文件名处理为字符串时,时间戳可以正确排序,而不需要任何额外的努力,而int将导致类似["1","10","2","3","4"...]的结果。

相关内容

  • 没有找到相关文章