我在Gradle(2.3)中有一个自定义任务
task myCustomTask (dependsOn: [ jacocoTestReport ]) << {
//Adding this didn't work, gives an error that options is not a property.
//options.compilerArgs = ["-x compileJava -x classes -x test -x testClasses"]
//Seems like the following line actually works!!! but still errors for "options" property. Strange!!
//myCustomTask.options = [ "-x compileJava -x classes -x test -x testClasses" ]
//..
//...some...operation
//..
}
我如何在Gradle中更改上述自定义任务代码,以便它可以执行我在命令行中执行的操作。我想当有人调用myCustomTask,如果它依赖于任何Gradle的核心任务(如compileJava,类等),那么它不应该调用这些任务(即模仿-x someTask行为在命令行)。
下面的作品!!
$ gradle jacocoTestReport -x compileJava -x classes -x test -x testClasses
然后,我想要的是:运行gradle myCustomTask应该做同样的事情(上面的命令在命令行中正在做的事情)。
错误:
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jacocoTestReport
:myCustomTask FAILED
FAILURE: Build failed with an exception.
* Where:
Initialization script '/home/giga/gradle-2.3/init.d/extra1.common-thids.gradle' line: 450
* What went wrong:
Execution failed for task ':myCustomTask'.
> No such property: options for class: org.gradle.api.DefaultTask_Decorated
Possible solutions: actions
cat -n on extra1..Gradle文件(init.)D级文件):
449 task myCustomTask (dependsOn: [ jacocoTestReport ]) << {
450 myCustomTask.options = [ " -x compileJava -x classes -x test -x testClasses " ]
451 }
我想这就是你想要的:
- 运行测试,生成JaCoCo报告,并(可选地)对报告执行某些操作。
- 对JaCoCo报告执行某些操作,而不要再次运行测试。
我认为你最好看mustRunAfter
而不是dependsOn
: https://docs.gradle.org/2.3/userguide/more_about_tasks.html#sec:ordering_tasks
task myCustomTask() {
mustRunAfter jacocoTestReport
doLast {
...
}
}
如果你切换到mustRunAfter
,你能做什么?
运行测试并立即使用JaCoCo报告。Gradle将确保myCustomTask
在JaCoCo报告任务之后运行,因此您可以确保您的自定义任务看到最新的JaCoCo输出:
gradle jacocoTestReport myCustomTask
使用先前生成的JaCoCo报告。jacocoTestReport
不是myCustomTask
的依赖项,因此jacocoTestReport
和它所依赖的任务不会被添加到任务图中,也不会运行。只运行myCustomTask
:
gradle myCustomTask