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

如何在用jRuby编写的Java程序中自定义退出状态?,java,ant,jruby,Java,Ant,Jruby,我正在开发一个验证util的通用基础,我希望将其作为JAR分发并使用Ant实现自动化。单独使用Java,我可以做如下事情 ... int validationResults = this.validate(); System.exit(validationResults) // via Ant: 1 = "BUILD FAILED", 0 = "BUILD SUCCESSFUL" ... 在使用CI系统的计划生成中使用验证util 不过,我是用jRuby而不是Java(用于学习)编写这篇文章的

我正在开发一个验证util的通用基础,我希望将其作为JAR分发并使用Ant实现自动化。单独使用Java,我可以做如下事情

...
int validationResults = this.validate();
System.exit(validationResults) // via Ant: 1 = "BUILD FAILED", 0 = "BUILD SUCCESSFUL"
...
在使用CI系统的计划生成中使用验证util

不过,我是用jRuby而不是Java(用于学习)编写这篇文章的。我尝试了以下方法,但它们不会在Ant中触发“构建失败”

例如,我在jRuby问题跟踪器中看到了这方面的问题,但我还没有找到解决问题的方法

我正在运行JRubyv1.6.6和Warblerv1.3.2。Ant目标如下所示:

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


是我做得不对,还是jRuby还不支持这一点?

当ant无法识别退出代码时,我会使用一个乱码来触发构建失败。它需要
ant contrib

在ant中:

<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


要在jRuby进程中出现非零退出代码时让Ant失败,您必须将java任务的
failonerror
属性设置为
true

如何从Ant调用jRuby代码?您提到的问题自jRuby 1.5以来已得到修复,它只涉及“0”退出代码。非零一直有效。问题是ant目标中缺少FailOneError属性。有关详细信息,请参阅已接受的答案。好主意。对于非Java进程,必须这样做。在这个问题场景中,jRuby是一个Java代码,可以使用任务启动,也可以不使用分叉?呃,我不认为这是显而易见的解决方案。我忘了添加FailOneError属性。添加它解决了我的问题。很抱歉,遗漏了ant目标,我用它更新了问题以供将来参考。
<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>