我的目标是开发一个Gradle
脚本,在测试开始运行之前启动我的Wildfly,并在测试完成后停止它,这样,Selenium测试就可以运行。
为了实现这一目标,我决定在我的build.gradle
在测试之前(test.doFirst)
JBOSS_HOME
环境变量是否存在; 如果存在,我运行以下命令启动我的Wildfly:
ext.jbossHome = System.getenv('JBOSS_HOME')
ext.isWildflyAvailable = (jbossHome != null)
task startWildfly(type:Exec) {
if (!isWildflyAvailable) {
return;
}
println 'Starting Wildfly...'
println 'JBOSS_HOME: ' + jbossHome
workingDir = file(jbossHome + '\\bin')
commandLine = ['cmd', '/C', 'standalone.bat']
}
test.doFirst {
startWildfly.execute()
}
// Ommited logic for stopping Wildfly
我的Wildfly开始,因为我可以读取登录控制台上的日志,但在它启动后,Gradle坚持使用它,并且永远不会继续进行其余的构建。
为了避免这种情况,我在命令行的末尾附加了一个&
,就像我在控制台上手动启动服务器一样,但Gradle在两次尝试中都开始引发错误:< / p>
commandLine = ['cmd', '/C', 'standalone.bat &']
commandLine = ['cmd', '/C', 'standalone.bat', '&&']
经过一些谷歌搜索,我发现了一些关于在不同的线程上运行commandLine的事情,但是,我将失去对该过程的跟踪,并且无法知道我的Wildfly何时开始。
还有其他选择吗?