Gradle myCustomTask - 如何通过传递命令行参数来避免调用dependents任务

时间:2015-07-30 20:58:23

标签: command-line gradle task gradle-2

我在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
extra1..gradle文件(init.d级文件)上的

cat -n

   449     task myCustomTask (dependsOn: [ jacocoTestReport ]) << {
   450          myCustomTask.options = [ " -x compileJava -x classes -x test -x testClasses " ]
   451     }

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的:

  • 运行测试,生成JaCoCo报告并(可选)对报告执行某些操作。
  • 使用JaCoCo报告执行某些操作而不再运行测试。

我认为您最好的选择是mustRunAfter而不是dependsOnhttps://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