我刚刚尝试了Jenkins并设置了一些项目.一个特别是调用shell脚本,并且正确地拾取该脚本的退出代码,从而产生通过/失败.然而,当我从命令行调用Scala时,无论发生什么,它都会通过.
在执行shell框中:
/opt/scala/2.9.1/bin/scala sdfsdfsd Exception in thread "main" java.lang.RuntimeException: Cannot figure out how to run target: sdfsdfsd ... (stack trace removed) Finished: SUCCESS
然而,与Java相同的操作会导致失败:
/opt/java/jdk1.7.0/bin/java sdfdfsd Error: Could not find or load main class sdfdfsd Finished: FAILURE
当从bash运行时,这两个都产生1的退出代码(使用echo $?)
我错过了什么或这是一个错误吗?
编辑:
有趣的是,我在使用ant exec时看到相同的行为 - 当我调用包含对scala的无效调用的shell脚本时,我得到了预期的错误代码,但是通过ant(使用failonerror ='true')我看到零并且构建成功.
谢谢
这是一个已知的错误Scala在管道stdin时使用退出代码,固定在主干中.
要修补系统,修复非常简单,在$ SCALA_HOME/bin/scala脚本中,第25行
function onExit() { if [[ "$saved_stty" != "" ]]; then restoreSttySettings exit $scala_exit_status fi }
将出口移到if的外面:
function onExit() { if [[ "$saved_stty" != "" ]]; then restoreSttySettings fi exit $scala_exit_status }
这将解决你的问题(实际上在蚂蚁中,但你必须为scalac做同样的事情).