gradle - 在多项目构建中依赖多个 gradle 任务
问题描述
目前我有启动谷歌云服务器、运行测试和停止服务器的任务。它在根项目中定义:
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"
}
可能吗?什么是使这项工作的正确语法?
解决方案
看起来您的问题是您将dependsOn
其视为“调用此任务”的意思。它实际上意味着“确保依赖任务的结果在依赖任务开始之前可用”。这就是为什么您的第一个解决方案不起作用的原因:诸如此类的语句testPaid.mustRunAfter
仅影响testPaid
任务本身的操作,而不影响其依赖项。
dependsOn
无论如何,您可以使用and获得您想要的行为finalizedBy
,但它们必须在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
. 如果你真的想在根项目中定义一个任务来运行测试,那也很容易:
构建.gradle:
task GCEtesting {
dependsOn = "app:connectedPaidDebugAndroidTest"
}
推荐阅读
- python - Odoo安装''错误:[Errno 98]地址已在使用中
- node.js - 如何使用外观设计模式在nodejs中汇集postgresql连接?
- java - 为什么我们在java中使用弱引用?
- splunk - splunk如何从字符串中提取数据?
- c - 处置(免费)一棵完整的二叉搜索树
- javascript - 格式化 jqXHR 响应文本的错误消息
- sql - 计算分组值
- php - MySQL 服务器已在使用 PHP 的 App 引擎中消失 Cloud SQL
- sql - 如果在 SQL 中不忽略它们,则应收到过去 10 天内预期的任何内容
- python - 在我的 Python 代码中使用线程 - 简单的 Ping 和 NSLOOKUP