我想要一个“主”蚂蚁目标,它取决于多个“工人目标”,(每个目标都“做好一件事”)
但是,我想有条件地执行“主”目标,即如果不满足条件,则不执行“工人”子目标
(具体来说,主目标创建并填充数据库。子目标创建模式、填充表等。主目标中的最后一步留下一个标记文件以指示“数据库创建一次”。在后续运行中,该过程不应尝试创建数据库。
问题
我怎样才能以“反”(即没有“antcall)”和“干”(不要重复自己)的方式实现这一点。
例子
<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 属性仅启用或禁用它们所附加的目标。它们不控制条件目标所依赖的目标是否被执行。事实上,在目标即将执行之前,它们甚至都不会被评估,并且它的所有前辈都已经运行。
我可以通过向所有“工作目标”添加“除非”子句来围绕问题进行编码,但希望避免重复。
另外,我使用 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>
谢谢