使任务依赖于另一个任务

vol*_*nde 3 groovy gradle

我正在gradle中尝试一些事情,我想定义一个名为"jenkins"的任务,该任务依赖于一个名为"test"的模块任务和另一个名为"connectedAndroidTest"的模块任务.我按照http://www.gradle.org/docs/current/userguide/more_about_tasks.html上的说明操作

这是我的"./gradlew任务"输出

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
[..]
Verification tasks
------------------
[..]
connectedAndroidTest - Installs and runs the tests for Build 'debug' on connected devices.
test - Runs the unit tests.

Other tasks
-----------
wrapper
Run Code Online (Sandbox Code Playgroud)

所以我认为,这个:

task jenkins
jenkins.dependsOn test
jenkins.dependsOn connectedAndroidTest
Run Code Online (Sandbox Code Playgroud)

会创建这个任务,并使其依赖于其他任务,所以我的jenkins只需要运行

./gradlew jenkins
Run Code Online (Sandbox Code Playgroud)

如果我有其他任务要添加到jenkins运行,我只需要更改gradle文件,我不必触摸jenkins.

但相反,我得到了这个令人讨厌的错误:

* What went wrong:
A problem occurred evaluating root project 'android-near-gradle'.
> Could not find property 'test' on root project 'android-near-gradle'.
Run Code Online (Sandbox Code Playgroud)

task jenkins
jenkins.dependsOn unit:test
jenkins.dependsOn library:connectedAndroidTest
Run Code Online (Sandbox Code Playgroud)

确实会导致同样的问题.

作为sugested我试过这个:

jenkins.dependsOn project(':unit').test
jenkins.dependsOn project(':library').connectedAndroidTest
Run Code Online (Sandbox Code Playgroud)

这导致:

* What went wrong:
A problem occurred evaluating root project 'android-near-gradle'.
> Could not find property 'test' on project ':unit'.
Run Code Online (Sandbox Code Playgroud)

深入研究Gradle Objects的文档,我想到了这个:

task jenkins
jenkins.dependsOn project(':unit').tasks.getByName('test')
jenkins.dependsOn project(':library').tasks.getByName('androidConnectedTest')
Run Code Online (Sandbox Code Playgroud)

但这导致了这个错误.这可能是一个问题,因为模块可能尚未加载?!

这更奇怪,因为错误消息是错误的

* What went wrong:
A problem occurred evaluating root project 'android-near-gradle'.
> Task with name 'test' not found in project ':unit'.
Run Code Online (Sandbox Code Playgroud)

当我执行

./gradlew :unit:test
Run Code Online (Sandbox Code Playgroud)

模块"单元"的"测试"任务正在执行.

我究竟做错了什么?

Ren*_*hke 7

在声明像这样的任务依赖时:

task jenkins
jenkins.dependsOn test
jenkins.dependsOn connectedAndroidTest
Run Code Online (Sandbox Code Playgroud)

你需要确保testconnectedAndroidTest任务已创建.由于您使用的是Android插件,因此很可能会延迟某些任务创建.关于该问题的可能修复是通过使用字符串表示法引用您的jenkins任务所依赖的任务.这种方式gradle应该将正确的任务连接在一起,无论它们在构建脚本(或插件)中的哪个位置被声明:

task jenkins
jenkins.dependsOn "test"
jenkins.dependsOn "connectedAndroidTest"
jenkins.dependsOn ":unit:test"
Run Code Online (Sandbox Code Playgroud)