如何通过bash脚本检测ant/maven的构建错误?

fei*_*fei 44 ant bash scripting maven-2

我正在编写一个bash脚本来自动化构建过程.有两个主要的构建块,一个是ant任务,一个是普通的mvn clean install.当这两个构建过程中出现构建错误时,我想要做一些事情.

问题是,这些构建将不时包含测试失败或错误,但最终结果是成功的.而且我相信这些进程返回的状态代码($?)应该为0,无论构建失败还是成功,我都错了.

那么,我的脚本检测最终结果(构建失败/成功)的最佳方法是什么,而不会在中间构建(测试错误等)期间捕获错误信息?

Ren*_*aud 50

mvn clean test
if [[ "$?" -ne 0 ]] ; then
  echo 'could not perform tests'; exit $rc
fi
Run Code Online (Sandbox Code Playgroud)
  • $? 是一个特殊的shell变量,它包含最近最近执行的命令的退出代码(无论是否成功终止).
  • -ne代表"不平等".所以这里我们测试退出代码mvn clean是否不等于零.

  • 如果你能详细说明这个答案,那将会好得多.如何以及为什么这个答案比其他答案更好? (5认同)
  • 在这里您可以找到类似的答案,但是这个答案的语法是:http://stackoverflow.com/questions/13651723/mvn-in-bash-script-if-statement/13651804#13651804 (4认同)

Ric*_*ler 11

针对Maven 2返回错误返回码(即始终返回0)存在一些问题.特别是在Maven 2.0.9中修复的MNG-3651.

在旧版本中,mvn.bat以此行结束:

exit /B %ERROR_CODE%
Run Code Online (Sandbox Code Playgroud)

从Maven 2.0.9起,最后一行改为:

cmd /C exit /B %ERROR_CODE%
Run Code Online (Sandbox Code Playgroud)

因此,如果构建失败,则返回非0返回码.在构建错误的情况下,返回码为1.如果您无法升级到2.0.9+,则可以考虑如上所述修改mvn.bat以返回正确的代码.


ire*_*ses 5

根据Ant手册:

ant启动脚本(在他们的Windows和Unix版本中)返回java程序的返回代码.因此,成功的构建返回0,失败的构建返回其他值.

Maven还会在出错时返回非零退出代码.这是一个链接,显示如何使用Maven Invocation API查询此状态.

因此在我看来,您应该能够在脚本中显式处理返回代码.大概你可以忽略与测试等有关的错误代码,如果你不关心这些错误代码.

execAnt中的错误代码是特定于操作系统的.这些可能会帮助你:


Mār*_*nis 5

unix/linux 的正确解决方案:

mvn clean install
rc=$?
if [ $rc -ne 0 ] ; then
  echo Could not perform mvn clean install, exit code [$rc]; exit $rc
fi
Run Code Online (Sandbox Code Playgroud)

“if”语句本身是一个命令,如果成功,它将重置 $? 变量为 0。回声也是如此。所以,你必须使用一个中间的本地变量,例如 $rc 来存储来自“mvn clean install”的返回码,然后它也可以传递给“exit”命令。