Пользовательская задача Gradle для сборки всех проектов без тестирования?

#testing #gradle #build.gradle #gradlew

#тестирование #градация #build.gradle #градлью #gradle #gradlew

Вопрос:

Я знаю, что могу выполнить ‘gradle build -x test’, но есть ли способ создать пользовательскую задачу Gradle, скажем, buildNoTests, которая будет создавать все мои проекты, но будет полностью игнорировать тесты (не компилировать / запускать их)?

Я читал, что задачи ‘assembly’ недостаточно, поскольку в ней могут отсутствовать другие задачи, которые не являются тестами, но включены в задачу ‘build’.

Ответ №1:

Поместите это в корень build.gradle

 allprojects {
    afterEvaluate {
        def buildTask = tasks.findByPath('build')
        if (buildTask) {
           task buildNoTests {
               dependsOn buildTask
           }
           gradle.taskGraph.whenReady { TaskExecutionGraph graph ->
               if (graph.hasTask(buildNoTests)) {
                   def skipNames = ['test', 'compileTestJava', 'processTestResources', 'testClasses'] as Set
                   Collection<Task> testTasks = graph.allTasks.findAll { skipNames.contains(it.name) }
                   testTasks.each { it.enabled = false }
               }
           }
       }
    }
}
  

Комментарии:

1. Я попытался поместить это в свой корневой файл gradle.build, но это ничего не дает. Должно ли это отличаться при размещении в корневом файле gradle.build? Вот скриншот вывода Gradle (я очистил ранее): i.imgur.com/w8WEwMX.png

2. Для меня это выглядит хорошо! Все ОБНОВЛЕНО, и тесты пропущены. Попробуйте gradle clean buildNoTests , если вы хотите, чтобы он фактически выполнил сборку с нуля

3. Просто попробовал — он очищает мой конкретный проект, но не создает их впоследствии, может быть, что-то не так с моей конфигурацией gradle?: i.imgur.com/GP107KS.png

4. Одна вещь, которую я забыл упомянуть: Gradle жалуется, что ‘:’ после dependsOn следует удалить, что я и сделал. Во-вторых, вот результат моего выполнения (gradle clean buildNoTests) pastebin.com/3vmANFeM и последнее — если я помещу ваш код в один из build.gradle внутреннего проекта, этот конкретный проект будет отлично собран без тестовых классов

5. Есть ли способ заставить ее работать для всех проектов, не вставляя их специально в каждый из файлов build.gradle? Добавление его в ‘allProjects’ в корневом файле не работает.