如何处理apache ant中的错误



我按顺序一个接一个地调用蚂蚁目标。如果一个目标失败了,我想继续进行序列中的下一个目标。如何做到这一点?

目前我使用antcall任务调用目标。

供参考-每个目标调用java类使用taskdef。这个java类可以抛出异常。

请建议。

注意:-我不能使用任何其他第三方jar,如ant-contrib等。

当前我使用antcall任务调用目标。

不要使用antcall。构建文件不是程序。它们是相关矩阵。您可以让Ant决定调用哪些目标以及调用的顺序。例如,我有一个名为package的目标,它取决于我的代码在目标compile中编译。compile目标取决于在目标generate-source中生成的源代码。我的build.xml看起来像这样:

<project default="package" name="my.proj">
    ...
    <target name="generate-source">
        ...
    </target>
    <target name="compile" depends="generate-source">
        ...
    </target>
    <target name="package" depends="compile">
        ...
    </target>
</project>

当我说:

$ ant package

Ant查看我的依赖矩阵。它意识到在运行package之前需要运行compile目标,然后意识到在运行compile之前需要运行generate-source。因此,Ant将按照以下顺序自动运行目标:

  • generate-source
  • compile
  • package

注意,我不必说package依赖于目标generate-source。相反,我所要做的就是指定主依赖项,Ant将自己计算出其他后续依赖项。

使用antcall强制排序有什么问题?因为我可能会弄错。如果我的build.xml改变了怎么办?我现在必须检查并验证我的整个文件,看看我的antcall任务是否仍然正确。此外,在更复杂的构建文件中,您可能会一遍又一遍地调用相同的任务。

在我来之前,我们有一个开发人员编写我们的build.xml文件。在一次构建中,他将build.xml划分为多个构建文件(另一个禁忌),然后手动使用antantcall任务进行构建。结果是一些目标在构建过程中被调用多达15次,并且一个构建需要20多分钟才能完成,因为一个特定的目标被一次又一次地调用(并且每个目标将删除由前一次调用生成的工件)。重写构建文件将构建过程缩短到仅仅4分钟。

作为奖励,每个目标都可以被调用和工作。例如,开发人员可以调用compile目标而不必构建整个包——在调试代码时能够这样做是很好的。此外,不要将任何清理过程作为正常构建步骤的一部分。相反,使用一个clean目标来删除所有生成的工件。将构建工件作为正常构建过程的一部分删除可能会减慢调试速度。如果开发人员需要一个干净的石板,他们可以运行clean目标。

作为原始查询的答案,几乎所有的任务都可以设置为忽略错误并继续。我建议使用属性,可以设置为覆盖默认设置:

<property name="halt.on.error"  value="true"/>
<target name="compile" ...>
    <javac ...
       failonerror="${halt.on.error}"
       .../>
    ....
</target>

如果我运行:

$ ant

生成将在出现编译错误时停止。但是,如果我运行:

$ ant -Dhalt.on.error="false"

这将覆盖构建文件本身的halt.on.error属性的设置,并允许程序在编译器错误时继续运行。

与其尝试跳过目标,不如忽略失败继续任务。

对于taskdef,您可以尝试包含参数onerror="ignore"对于javac任务,您可以包含failonerror="false"

相关内容

  • 没有找到相关文章

最新更新