Gradle myCustomTask - Как избежать вызова зависимых задач, передавая аргументы командной строки

У меня есть пользовательское задание в 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     }

1 ответ

Я полагаю, это то, что вы хотите:

  • Запустите тесты, сгенерируйте отчет JaCoCo и (необязательно) сделайте что-нибудь с отчетом.
  • Сделайте что-нибудь с отчетом JaCoCo, не запуская тесты снова.

Я думаю, что вам лучше всего смотреть на mustRunAfter вместо dependsOn: https://docs.gradle.org/2.3/userguide/more_about_tasks.html

task myCustomTask() {
    mustRunAfter jacocoTestReport
    doLast {
        ...
    }
}

Что вы можете сделать, если вы переключитесь на mustRunAfter?

Запустите тесты и немедленно используйте отчет JaCoCo. Gradle обеспечит myCustomTask запускается после задачи отчета JaCoCo, так что вы можете быть уверены, что ваши пользовательские задачи увидят последние выходные данные JaCoCo:

gradle jacocoTestReport myCustomTask

Использовать ранее сгенерированный отчет JaCoCo. jacocoTestReport это не зависимость myCustomTask, так jacocoTestReportи задачи, от которых это зависит, не будут добавлены в граф задач и не будут выполняться. Только myCustomTask будет запущено:

gradle myCustomTask
Другие вопросы по тегам