如何在ANT构建中的多个目标“依赖”属性中使用一个目标?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在ANT构建中的多个目标“依赖”属性中使用一个目标?相关的知识,希望对你有一定的参考价值。
我正在使用ANT构建进行部署过程。为此,我遵循以下几点,
- 在ANT中创建了名为'initiate.deploy'的五个目标(用于启动部署),'svn.checkout'(从SVN检出源到工作空间),'generate.ear'(EAR生成)和'deploy.ear'(将EAR部署到服务器),'clean.workspace'(清洁工作区脏东西)。
- 目标'initiate.deploy'是我的默认目标。
- 我需要在'svn.checkout'目标之前和'deploy.ear'目标之后清理工作区目录。
- 我将'clean.workspace'目标放在'svn.checkout'目标的'depends'属性和'initiate.deploy'目标中。
我的代码:
<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear, clean.workspace">
..........................
</target>
<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace">
..........................
</target>
但目标'clean.workspace'仅在'svn.checkout'之前执行一次,而不是在'deploy.ear'目标之后执行。
构建序列创建如下。
目标'initiate.deploy'的构建顺序是[clean.workspace,svn.checkout,check.workSpace,update.property.file,generate.ear,deploy.ear,initiate.deploy]
如何在ANT构建中的多个目标“依赖”属性中使用一个目标?
答案
在从上面的给定目标(例如D)延伸回来的依赖链中,每个目标只执行一次,即使多个目标依赖于它。
我的理解是,这旨在避免依赖关系图中的循环。
因此,您需要修改目标,例如从clean.workspace
的依赖项中删除initiate.deploy
并通过antcall
任务明确调用它:
<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear">
..........................
<antcall target="clean.workspace" />
</target>
<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace">
..........................
</target>
更新:
正如评论中所提到的,antcall
任务将在新的Ant项目中启动被调用的目标,这可能会产生不良的开销。为了避免这种行为,可以将目标包装为macrodef并将其作为任务在任何其他目标中调用。然后,您可以更改调用的目标,使其调用新的macrodef
,以使其可用作其他任务的依赖项:
<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear">
..........................
<clean.workspace.macro />
</target>
<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace">
..........................
</target>
<target name="clean.workspace">
<clean.workspace.macro />
</target>
<macrodef name="clean.workspace.macro">
<sequential>
<!-- do the workspace cleanup -->
..........................
</sequential>
</macrodef>
以上是关于如何在ANT构建中的多个目标“依赖”属性中使用一个目标?的主要内容,如果未能解决你的问题,请参考以下文章