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