我正在尝试使用Gradle任务来运行Play服务,但我发现Gradle任务将挂起(可能是等待Play引导脚本的返回值)。
我在Play方面所做的只是:
sbt dist
这会产生一个.zip发行版(例如' myproject.zip'),然后我将其扩展到我想要运行此服务的位置。
在Gradle方面,我以为我会做这样的事情:
task start(type: Exec) {
workingDir "myproject/bin"
commandLine './myproject'
}
这确实启动了Play服务,但Gradle任务将无限期挂起(直到你执行控件+ C)。
想到的最明显的事情是:
task start(type: Exec) {
workingDir "myproject/bin"
commandLine 'nohup ./myproject &'
}
但这最终会走到尽头:
Execution failed for task ':start'.
> A problem occurred starting process 'command 'nohup ./playservicetemplate &''
这似乎是一个非常常见的用例,所以我想知道是否有一个我忽视的明显解决方案。
答案 0 :(得分:0)
也许有更多的Gradle-ish方法可以做到这一点,但我通过利用ProcessBuilder解决了这个问题。我的新任务看起来像:
task start {
ProcessBuilder builder = new ProcessBuilder("./myproject")
builder.directory(new File("myproject/bin"))
builder.start()
}
显然,你可以通过这种方式获得更多的动力(一个快速的谷歌' java流程构建者'会在页面示例中为你提供网页),但这样做可以达到我的目的。