我正在开发一个验证util的通用基础,我希望将其作为JAR分发并使用Ant进行自动化。单独使用Java,我可以做一些类似的事情
...
int validationResults = this.validate();
System.exit(validationResults) // via Ant: 1 = "BUILD FAILED", 0 = "BUILD SUCCESSFUL"
...
在使用CI系统的计划生成中使用验证util。
然而,我是用jRuby而不是Java写这篇文章的(为了学习)。我尝试了以下方法,但它们不会在Ant中触发"BUILD FAILED"。
java.lang.System.exit(1) # using "require 'java'" at the the top of the file
Kernel.exit 1
exit 1
我在jRuby问题跟踪器中看到了关于这一点的票证(例如jRuby-1650),但我还没有找到解决问题的方法。
我正在运行jRuby v1.6.6和Warbler v1.3.2。蚂蚁的目标看起来像这样:
<target name="validate">
<java jar="./validator.jar" fork="true" />
</target>
是我做得不对,还是jRuby还不支持这一点?
我假设您从java
Ant任务开始您的jRuby代码。
为了在jRuby进程中出现非零退出代码的情况下使Ant失败,您必须将java任务的failonerror
属性设置为true
。
当ant无法识别退出代码时,这里有一个我用来触发构建失败的漏洞。它需要ant-contrib
。
蚂蚁:
<delete file="${java.io.tmpdir}/build-executable-error"/>
<exec executable= ... />
<if>
<resourceexists>
<file file="${java.io.tmpdir}/build-executable-error"/>
</resourceexists>
<then>
<loadfile srcfile="${java.io.tmpdir}/build-executable-error"
property="build.failure.message"/>
<fail message="${build.failure.message}"/>
</then>
</if>
然后,可执行文件负责在任何错误场景中创建和填充文件${java.io.tmpdir}/build-executable-error
。