有没有一种方法可以在每次构建结束时始终运行一个目标?
我知道我可以像这样做...
<target name="runJob" depends="actuallyRunJob, teardown"/>
...但这样做不够规范,因为我需要为每个需要拆卸的目标编写一个包装器。
有什么想法吗?
谢谢, Roy
有没有一种方法可以在每次构建结束时始终运行一个目标?
我知道我可以像这样做...
<target name="runJob" depends="actuallyRunJob, teardown"/>
...但这样做不够规范,因为我需要为每个需要拆卸的目标编写一个包装器。
有什么想法吗?
谢谢, Roy
使用构建监听器,例如 exec-listener ,它为每个构建结果提供任务容器(BUILD SUCCESSFUL | BUILD FAILED),您可以在其中放置所有需要的任务。
有关详细信息,请参见Ant 中针对 exec 失败的条件任务或自行创建构建监听器,参见 http://ant.apache.org/manual/develop.html 和您的 Ant 安装的 API 文档 = $ANT_HOME/docs/manual/api/org/apache/tools/ant/BuildListener.html。
和Rebse的回答一样,你可以编写一个JavaScript的BuildListener(如果你不介意在makefile中交换Ant扩展与一些代码):
<project name="test-ant" default="build">
<target name="init">
<script language="javascript"> <![CDATA[
function noop () {}
var listener = new org.apache.tools.ant.BuildListener() {
buildFinished: function(e) {
project.executeTarget("_finally");
},
buildStarted: noop,
messageLogged: noop,
targetStarted: noop,
targetFinished: noop,
taskStarted: noop,
taskFinished: noop
}
project.addBuildListener(listener)
]]></script>
</target>
<target name="build" depends="init"/>
<target name="fail" depends="init">
<fail message="expected failure"/>
</target>
<target name="_finally">
<echo message="executing _finally target..."/>
</target>
</project>
我有类似的需求,最终编写了一个自定义任务,代码如下:
<!-- a task that executes the embedded sequential element at the end of the build,
but only if the nested condition is true; in this case, we're dumping out the
properties to a file but only if the target directory exists (otherwise, the clean
target would also generate the file and we'd never really be clean!) -->
<build:whendone>
<condition>
<available file="${project_target-dir}" />
</condition>
<sequential>
<mkdir dir="${project_final-build-properties-file}/.." />
<echoproperties destfile="${project_final-build-properties-file}" />
</sequential>
</build:whendone>
script
在一个 target 内部,那么buildStarted
和buildFinished
事件无法成功触发。可以通过将script
直接放置在project
下来解决。 - Alex