我在gradle中尝试一些事情,我想定义一个名为“jenkins”的任务,它依赖于一个名为“test”的模块任务和另一个名为“connectedAndroidTest”的模块任务。我按照http://www.gradle.org/docs/current/userguide/more_about_tasks.html
上的说明操作这是我的“./gradlew tasks”
的输出------------------------------------------------------------
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
所以我认为,这个:
task jenkins
jenkins.dependsOn test
jenkins.dependsOn connectedAndroidTest
将创建此任务,并使其依赖于其他任务,因此我的jenkins只需要运行
./gradlew jenkins
如果我要将其他任务添加到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'.
也
task jenkins
jenkins.dependsOn unit:test
jenkins.dependsOn library:connectedAndroidTest
会导致同样的问题。
我在吸食时试过这个:
jenkins.dependsOn project(':unit').test
jenkins.dependsOn project(':library').connectedAndroidTest
导致:
* What went wrong:
A problem occurred evaluating root project 'android-near-gradle'.
> Could not find property 'test' on project ':unit'.
深入研究Gradle Objects的文档,我想出了这个:
task jenkins
jenkins.dependsOn project(':unit').tasks.getByName('test')
jenkins.dependsOn project(':library').tasks.getByName('androidConnectedTest')
但是这导致了这个错误。这可能是一个问题,因为模块可能尚未加载?!
这更奇怪,因为错误信息错误
* What went wrong:
A problem occurred evaluating root project 'android-near-gradle'.
> Task with name 'test' not found in project ':unit'.
执行时
./gradlew :unit:test
模块“单元”的“测试”任务正在执行。
我做错了什么?
答案 0 :(得分:7)
声明像这样的任务依赖:
task jenkins
jenkins.dependsOn test
jenkins.dependsOn connectedAndroidTest
您需要确保已创建test
和connectedAndroidTest
个任务。由于您正在使用Android插件,因此很可能会延迟某些任务创建。关于该问题的可能修复是通过使用字符串表示法引用您的jenkins任务所依赖的任务。这种方式gradle应该将正确的任务连接在一起,无论它们在构建脚本(或插件)中的哪个位置被声明:
task jenkins
jenkins.dependsOn "test"
jenkins.dependsOn "connectedAndroidTest"
jenkins.dependsOn ":unit:test"
答案 1 :(得分:2)
jenkins.dependsOn ":unit:test"
jenkins.dependsOn "library:connectedAndroidTest"
实际上有效。
因此,通过字符串引用任务是一种方法,因为其他任务不是jet,因为它们是主gradle文件的模块。
答案 2 :(得分:0)
尝试:
jenkins.dependsOn project(':unit').test