Question
当两个任务都被执行时,我能否以某种方式确保一个任务将在另一个任务之前/之后执行?我don't想要在它们之间添加始终存在的依赖关系。
背景
我有两项任务,一项任务启动服务器,另一项任务对其运行测试。启动该服务器的任务在一个新进程中运行它,所以我可以运行gradle startServer runServerTests
。由于启动服务器需要一些时间,因此必须可以使用一个 gradle 进程启动服务器,然后使用另一个 gradle 进程多次运行测试。
现在,我尝试创建一个任务来执行 CI 环境执行的所有操作,其中包括启动服务器和运行服务器测试。我显然想确保在运行测试之前启动服务器,但到目前为止我运气不佳。
Attempts
我的第一次尝试如下,但由于定义的依赖项的顺序,这不起作用无法保证 http://issues.gradle.org/browse/GRADLE-427:
task doItAll(dependsOn: [startServer, runServerTests]) { ... }
我的第二次尝试,调用任务在行动中 http://gradle.1045684.n5.nabble.com/Running-a-task-after-execution-of-another-task-td4405504.html不起作用并且不支持 http://gradle.1045684.n5.nabble.com/1-0-m-7-Gradle-idea-task-fails-with-lock-exception-td5123405.html:
task doItAll() << {
tasks.startServer.execute()
tasks.runServerTests.execute()
}
解决方案已在路线图上(等级-294 http://issues.gradle.org/browse/GRADLE-294, 初始化器/终结器 http://forums.gradle.org/gradle/topics/improving_tasks-19op1r),但这现在对我没有帮助。
目前它可能不会对你有太大帮助,但是我最近在这个领域提交了一个拉取请求,并且暗示它应该进入 1.6(他们目前正在发布 1.5 并且 PR 没有进入该版本) - 请参阅讨论here http://gradle.1045684.n5.nabble.com/Must-run-after-ordering-td5710924.html。你最好的选择是等待拉取请求 https://github.com/gradle/gradle/pull/134在 1.5 版本发布后合并到 master 中,然后获取第一个可用的夜间构建here http://www.gradle.org/nightly.
EDIT
Gradle 1.6 已经发布了一段时间,现在你可以简单地使用mustRunAfter
为了实现这一点。看Gradle 手册中有关任务排序的部分 http://www.gradle.org/docs/current/userguide/more_about_tasks.html#sec%3aordering_tasks了解详情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)