我正在尝试为Apache Servicemix client.bat脚本(Groovy 2.5,Apache Servicemix 7.0.1)编写Groovy包装器,以便以编程方式发出karaf捆绑命令,例如开始,停止,列表等。
因此,我从默认的Servicemix安装开始,并开发了一个简单的捆绑包,可以通过client.bat脚本手动安装和分解它们。
然后,我编写了一个简单的Groovy脚本来自动化安装
String cmd = 'e:/apache-servicemix-7.0.1/bin/client.bat bundle:install ' +
"'file:///C:/valid/bundle/jar"
def sout = new StringBuilder(), serr = new StringBuilder()
println cmd
Process proc = cmd.execute()
proc.waitForProcessOutput(sout, serr)
int exitValue = proc.waitFor()
println "Exiting with ${exitValue}"
println "out> $sout"
println "err> $serr"
提供了正确的捆绑软件,脚本可以很好地播放并安装捆绑软件。 但是,如果我给出了无效的包(例如不存在的文件),则退出代码为0,而输出显示错误
E:\test\serviceMix>groovy bundle_install_fail.groovy
e:/apache-servicemix-7.0.1/bin/client.bat bundle:install 'file:///C:/unvalid/bundle/jar'
Exiting with 0
out> Bundle IDs:
Error executing command: Error installing bundles:
Unable to install bundle file:///C:/unvalid/bundle/jar
err>
请注意,如果我直接从dos框中运行client.bat命令,则该命令将退出,错误级别为1。Groovy脚本报告执行成功(proc.waitFor返回0)。 由于client.bat是Java程序的包装程序,因此我解决了使用适当参数直接调用Java程序的问题。在这种情况下,groovy报告正确的错误级别。由于我必须执行几次这样的集成,因此我想找到一种解决方案以便使用程序包提供的脚本,因为这将更易于实现并且更易于维护。