当前,我有启动Google Cloud服务器,运行测试并停止服务器的任务。它是在根项目中定义的:
buildscript {...}
allprojects {...}
task startServer (dependsOn: "backend:appengineStart") {}
task testPaid (dependsOn: "app:connectedPaidDebugAndroidTest") {}
task stopServer (dependsOn: "backend:appengineStop") {}
task GCEtesting {
dependsOn = ["startServer",
"testPaid",
"stopServer"]
group = 'custom'
description 'Starts GCE server, runs tests and stops server.'
testPaid.mustRunAfter 'startServer'
stopServer.mustRunAfter 'testPaid'
}
我尝试了多种方式来编写类似这样的内容,但仅需完成一项任务即可。我没有得到如何从另一个项目中引用任务并在其上调用mustRunAfter的信息。这是行不通的(我还尝试从Project.tasks.getByPath,root.tasks等引用):
task GCEtesting {
dependsOn = ["backend:appengineStart",
"app:connectedPaidDebugAndroidTest",
"backend:appengineStop"]
group = 'custom'
description 'Starts GCE server, runs tests and stops server.'
"app:connectedPaidDebugAndroidTest".mustRunAfter "backend:appengineStart"
"backend:appengineStop".mustRunAfter "app:connectedPaidDebugAndroidTest"
}
有可能吗?使此工作正确的语法是什么?
答案 0 :(得分:2)
您的问题似乎是您将dependsOn
视为“调用此任务”。这实际上意味着“确保在依赖任务开始之前 可用依赖任务的结果”。这就是为什么您的第一个解决方案不起作用的原因:testPaid.mustRunAfter
之类的语句仅影响testPaid
任务本身的操作,而不影响其依赖项。
无论如何,您可以使用dependsOn
和finalizedBy
来获得所需的行为,但是必须在 app 子项目的构建文件中声明它们。
app / build.gradle:
task connectedPaidDebugAndroidTest {
//
//...
//
dependsOn 'backend:appengineStart' // Ensure appengineStart is run at some point before this task
finalizedBy 'backend:appendginStop' // Ensure appengineStop is run at some point after this task
}
然后,您可以简单地使用gradle app:connectedPaidDebugAndroidTest
运行测试。如果您真的想在根项目中定义一个任务来运行测试,那也很容易:
build.gradle:
task GCEtesting {
dependsOn = "app:connectedPaidDebugAndroidTest"
}