2010-02-10 32 views
0

我需要保留一个控制值(可能在文件内),以决定是否执行任务。Ant +保持控制值

我从这里来的:Ant: How can I subtract two properties (containing timestamps)?

我想要做的,是检查如果控制值等于一个周期(MMYY)。如果相等,则不做任何事情,但如果不相同,则应更新控制值。

例如:

<task dosomethingifcontrolvaluediffers> 
control value is 0000 
(calculated) property is: 0110 
Then, control value should now be 0110. 

</task> 

我想保持值在一个单独的文件中,如果重写是neccessary,然后截断文件和更新,但

1)不能找到一种方法要做到这一点

2)不知道如何。

3)脚本?将是我最喜欢的选择,但不知道如何在JS中。

有什么想法?

在此先感谢。

回答

1

应该在Ant之外完成。用你认识的任何语言(bash,Python,JavaScript等)编写脚本来完成计算,检查并根据需要使用该值作为参数调用Ant。

Ant并不打算成为脚本语言。当他们试图这样做时,人们会陷入困境。

+0

奔忙。我希望“ant不是脚本语言”不会出现。 事情是,蚂蚁是我在这个项目中唯一的“脚本”可能性。 – Tom 2010-02-11 00:30:32

+0

你在使用什么操作系统?您不能在Windows上使用批处理或命令文件,或者在* nix中使用cshell?你总是有一个选择。 – duffymo 2010-02-11 01:36:23

0

我还没有尝试过,但你可以做到这一点:根据属性值

使用条件的任务,像这样

<condition property="exectask"> 
    <equals arg1="${prop1}" arg2="${prop2}" trim="true"/> 
</condition> 

然后再打一个目标

<target name="dosomethingifcontrolvaluediffers" unless="${exectask}"> 
</target> 

希望它有帮助。

+0

我明白你的意思,但继承人的事情。 prop1可以计算,但我的问题是“我怎么得到prop2”。另外,我如何在目标内部更新它。 谢谢。 – Tom 2010-02-11 00:26:31

+0

对不起,我不明白:S也许prop2是控制值? – Alonso 2010-02-11 00:34:11

0

正如duffymo所说,Ant不是一种脚本语言。 虽然您可以在Ant中使用JavaScript等脚本语言,但请参阅scriptdef task以了解详细信息。 您可以定义自己的任务是这样的:

<scriptdef name="nameOfTheTask" language="javascript"> 
    <![CDATA[ 
     (your script goes here) 
    ]]> 
</scriptdef> 

可以使用新的任务是这样的:

<nameOfTheTask/> 

您也提到,你想存储在一个文件中的值。这可以通过echo task来完成:

<echo file="yourFile">aProperty=${aProperty}{line.separator}</echo> 

该值写入文件yourFile。输出是例如:

aProperty=some value 

您可以再次在脚本与loadproperties task读值:

<loadproperties srcFile="yourFile" />