我正在使用ANT构建进行部署过程。为此,我遵循以下几点,
- 在ANT中创建了名为'initiate.deploy'的五个目标(以启动 部署),'svn.checkout'(从SVN结帐到 工作空间),'generate.ear'(EAR生成)和'deploy.ear' (将EAR部署到服务器中),'clean.workspace'(清理工作区 dirtory)。
- 目标'initiate.deploy'是我的默认目标。
- 我需要在'svn.checkout'target之前清理工作区目录 并在'deploy.ear'target。
之后- 我将'clean.workspace'目标放在'depends'属性中 'svn.checkout'目标并在'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构建中的多个目标“依赖”属性中使用一个目标?
答案 0 :(得分:1)
在从给定目标延伸的依赖链中,例如 在上面的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>