2014-05-21 71 views
3

我正在尝试gradle中的东西,并且我想要定义一个名为“jenkins”的任务,该任务依赖于一个称为“test”的模块任务和另一个称为“connectedAndroidTest”的模块任务。 I'm下面就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 

所以我会假设输出,这:

task jenkins 
jenkins.dependsOn test 
jenkins.dependsOn connectedAndroidTest 

将创建此任务,并使其取决于其他人,所以我的詹金斯只需要运行

./gradlew jenkins 

如果我有ot她的任务被添加到詹金斯运行,我只需要改变gradle文件,我不必去碰jenkins。

但是相反I'm得到这个讨厌的错误:

* 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 

不会导致同样的问题。

由于sugested我尝试这样做:

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'. 

展望深入到摇篮的文档对象我想出了这一点:

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 

模块“单位”的“测试”任务beeing执行。

我在做什么错?

+0

你正在使用什么版本的gradle? – cfrick

+0

我正在使用Gradle 1.10 – volkersfreunde

回答

6

在声明这样的任务相关:

task jenkins 
jenkins.dependsOn test 
jenkins.dependsOn connectedAndroidTest 

,你需要确保testconnectedAndroidTest任务已创建。由于您使用的是android插件,因此很有可能某些任务创建被推迟。在可能的解决方案是通过使用字符串符号来引用您的jenkins任务依赖的任务。这种方式应该的gradle无论接线正确的任务一起构建脚本(或插件)在声明中:

task jenkins 
jenkins.dependsOn "test" 
jenkins.dependsOn "connectedAndroidTest" 
jenkins.dependsOn ":unit:test" 
0

尝试:

jenkins.dependsOn project(':unit').test 
+0

好的,我最终在问题中提出了我的新发现。简而言之:它没有工作:( – volkersfreunde

+0

任何可以在GitHub上访问的最小工作示例来尝试?我可能是项目评估的问题。 – Opal

2
jenkins.dependsOn ":unit:test" 
jenkins.dependsOn "library:connectedAndroidTest" 

实际工作。

所以通过字符串引用任务是要走的路,因为其他任务不知道jet,因为它们是主gradle文件的模块。