在gradle中执行bash脚本

我正在用geb进行功能测试。

我的应用程序是使用virgo部署的,并使用HSQLDB来存储数据。我想在此工作版本的应用程序上执行测试,但是每次运行webtests时,我都想从空数据库开始。

我写了一个简单的bash脚本

#!/bin/sh

rm -rf $VIRGO_HOME/aresdb*

$VIRGO_HOME/bin/shutdown.sh &

sleep 10

$VIRGO_HOME/bin/startup.sh &

这将删除数据库并重新启动处女座。

但是,当我将其添加到build.gradle任务执行命令时,它永远不会结束。

task cleanDB(type: Exec) {

commandLine './clean.sh'

}

为什么这样呢?当我在控制台中运行此脚本时,它会迅速返回(但virgo仍会写入控制台)。

我试图在单独的线程中运行它,但是遇到以下错误:

task cleanDBThread()<<{

def cleanDBThread1 = Thread.start {

cleanDB.execute()

}

sleep 10000

println "wake up!"

}

Exception in thread "Thread-32" java.lang.IllegalStateException:

Cannot start long running operation, as the task artifact state cache

(/home/tomasz/ares/.gradle/1.0-milestone-9/taskArtifacts) has not been locked.

我还尝试在hibernate配置中设置’create-drop’,但这也需要重新启动处女座。即使重新部署应用程序也无济于事。

如何使用空数据库运行Webtest?

回答:

那真是怪了

我创建了一个任务

task callCL(type: Exec) {

commandLine './cl.sh'

}

调用cl.sh文件

#!/bin/sh

echo "starting "

./acl.sh &

sleep 10

./acl.sh &

调用acl.sh

#!/bin/sh

echo "I am not doing anything"

而且有效!但是有一点是,当您添加./acl.sh&字符时

您是从另一个开始执行gradle的线程中调用任务的,看起来有点像挂了。我会从您的关机请求中删除&,然后像这样开始

#!/bin/sh

rm -rf $VIRGO_HOME/aresdb*

$VIRGO_HOME/bin/shutdown.sh

$VIRGO_HOME/bin/startup.sh

无论如何,您都想在关机前的同一线程中等待,而无需调用sleep!

以上是 在gradle中执行bash脚本 的全部内容, 来源链接: utcz.com/qa/413913.html

回到顶部