#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’ в корневом файле не работает.