2017-07-12 12 views
0

我有我的生成文件中定义了以下默认目标:调用Ant目标直接和间接地根据病情

<target name="main" depends="generate.doc" unless="generated.doc.present"/> 

当DOC文件已经存在,则该属性设置。在这种情况下,我不想做任何事情。但是,它不起作用,因为依赖目标总是在条件评估之前执行。

我仍然需要能够直接调用依赖目标并执行它,而不管输出是否已经存在。因此,这样的事情是行不通的:

<target name="main" depends="generate.doc"/> 
<target name="generate.doc" unless="generated.doc.present">...</target> 

有没有在主要目标中使用antcall的解决方案?

+0

'generated.doc.present'属性是如何设置的?它是设置在Ant的内部还是外部?如果它被设置在Ant中,它是在“”的内部还是外部? –

+0

我对这个问题的描述有点困惑。你是说当你调用'main'时,如果文档不存在,你只想生成文档,但是当你直接调用'generate.doc'时,你希望它生成,不管是什么? – CAustin

+0

@Chad Nouis,该属性在同一个构建文件中和''之外设置为''。 –

回答

0

在下面的示例中,main<target>已被更改为具有两个依赖关系。名为-pre-conditions的新<target>将在generate.doc之前运行。

-pre-conditions<target>仅在已设置generated.doc.present属性时才设置skip-generate.doc属性。

generate.doc<target>已更改,因此如果-pre-conditions设置了skip-generate.doc属性,它将被跳过。

通过这些更改,generate.doc将在直接调用时始终运行。

<target name="-pre-conditions"> 
    <condition property="skip-generate.doc"> 
     <isset property="generated.doc.present"/> 
    </condition> 
</target> 

<target name="main" depends="-pre-conditions, generate.doc"/> 

<target name="generate.doc" unless="skip-generate.doc"> 
    <echo>generate.doc running</echo> 
</target>