Как запустить задачу, созданную плагином в gradle

Я написал плагин Gradle, который добавляет пользовательскую задачу с именем generateTestDocs, которая зависит от задачи groovydoc, которая сама создается плагином groovy.

//MyPlugin.groovy
@Override
void apply(Project project) {
    project.apply(plugin: 'groovy')
    project.task(type: GenerateTestDocsTask, dependsOn: ':groovydoc', 'generateTestDocs')
}

project.tasks.groovydoc.doFirst {
    println "I should see this message but I don't"
}

Я пытаюсь протестировать этот плагин, запустив задачу generateTestDocs

@Test
void testRunGenerateTestDocs() {
    Project project = ProjectBuilder.builder().build()
    project.apply(plugin: 'my.gradle.plugin')
    project.tasks.generateTestDocs.actions*.execute(project.tasks.generateTestDocs)
}

Для последней строки в моем тесте я хотел бы вместо этого просто сказать project.task.generateTestDocs.execute() и запустить задачу со всеми ее зависимостями, но, похоже, это не работает. Документация по написанию плагинов gradle показывает только такие утверждения, как assertTrue(project.tasks.hello instanceof GreetingTask), которые показывают, что задача добавлена ​​в проект, но не показывает, как запустить эту задачу.


person Marty Neal    schedule 08.12.2014    source источник
comment
возможный дубликат программно вызвать граф задач gradle в модуле тест   -  person Marty Neal    schedule 09.12.2014
comment
Неважно, нашел свой ответ в этом вопросе: вызвать граф задач Gradle в модульном тесте"> stackoverflow.com/questions/16264966/   -  person Marty Neal    schedule 09.12.2014


Ответы (2)


ProjectBuilder предназначен только для модульных тестов. Чтобы запустить сборку в рамках теста, вам потребуется использовать API инструментов Gradle или сторонний плагин, такой как nebula-test (который основан на инструментальном API).

person Peter Niederwieser    schedule 08.12.2014

Я столкнулся с тем же вопросом, я решил это, добавив

применить плагин: CustomPluginName

в текущем gradle.build:

apply plugin: 'groovy'
...
// in this case Plugin name is MyPlugin
apply plugin: MyPlugin 
person Mikey Yang    schedule 03.09.2017