如何在jRuby编写的Java程序中执行自定义退出状态?

时间:2012-03-12 12:31:32

标签: java ant jruby

我正在研究验证工具的通用基础,我希望将其作为JAR分发并使用Ant自动化。单独使用Java,我可以做类似

的事情
...
int validationResults = this.validate();
System.exit(validationResults) // via Ant: 1 = "BUILD FAILED", 0 = "BUILD SUCCESSFUL"
...

使用CI系统在预定构建中使用验证工具。

然而,我在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。 Ant目标如下所示:

<target name="validate">
  <java jar="./validator.jar" fork="true" />
</target>

我是不是做得对,还是jRuby不支持这个(还有)?

2 个答案:

答案 0 :(得分:2)

我想你是从java Ant task开始你的jRuby代码。

如果在jRuby进程中出现非零退出代码时导致Ant失败,则必须将java任务的failonerror属性设置为true

答案 1 :(得分:1)

这是我用来触发构建失败的kludge,否则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