我正在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)
模块"单元"的"测试"任务正在执行.
我究竟做错了什么?
在声明像这样的任务依赖时:
task jenkins
jenkins.dependsOn test
jenkins.dependsOn connectedAndroidTest
Run Code Online (Sandbox Code Playgroud)
你需要确保test
和connectedAndroidTest
任务已创建.由于您使用的是Android插件,因此很可能会延迟某些任务创建.关于该问题的可能修复是通过使用字符串表示法引用您的jenkins任务所依赖的任务.这种方式gradle应该将正确的任务连接在一起,无论它们在构建脚本(或插件)中的哪个位置被声明:
task jenkins
jenkins.dependsOn "test"
jenkins.dependsOn "connectedAndroidTest"
jenkins.dependsOn ":unit:test"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4067 次 |
最近记录: |