使用多个“依赖”时如何检查一次条件?

时间:2012-07-12 20:22:22

标签: ant

我希望有一个'主'蚂蚁目标,它依赖于多个“工人目标”,(每个目标都做得很好)

但是,我想有条件地执行“主”目标,即如果不满足条件则不执行“工人”子目标

(特别是,主目标创建并填充数据库。子目标创建模式,填充表等。主目标中的最后一步留下标记文件以指示“数据库创建一次。”在后续运行中,该过程不应该尝试创建数据库。

问题

如何以“antish”(即没有“antcall”和DRY(不要'重复自己)的方式实现这一点。

实施例

<target name="check-db-created">
    <available file="db.created.marker.txt" property="db.already.created"/>
</target>

<target name="create-new-db" 
        unless="db.already.created"
        depends="check-db-created,create-db-mssql,create-tables,compile-sp,disable-constraints.....">
</target>

<target name="create-db-mssql" >
   ..do stufff
</target>

评论

问题是即使“主”目标不需要运行,'子目标'('create-db-mssql',create-tables'等)也会执行。 Ant文档清楚地讨论了这一点。

  

重要说明:if和unless属性仅启用或禁用   它们所附着的目标。他们不控制是否   目标条件目标依赖于执行。事实上,   他们甚至没有得到评估,直到目标即将到来   已执行,其所有前任已经执行。

我可以通过向所有“工作人员目标”添加“除非”条款来编写rpoblem代码,但我们希望避免重复。

另外,我使用如下的antcall,但更愿意避开蚂蚁世界的“GOTO”。

<target name="create-new-db" depends="check-db-created"
        unless="db.already.created">
  <antcall target="create-new-db-internal"/>
</target> 

<target name="create-new-db-internal"
        depends="create-db,create-tables,compile-sp,disable-constraints,insert-base-data,insert-installer-generated-sql,insert-kb-data"
>
</target>

感谢

0 个答案:

没有答案