0

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

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

1 回答 1

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
于 2015-07-30T21:35:50.807 回答