Как запустить сборку Gradle без выполнения тестов?
Решение: флаг командной строки -x или --exclude-task
Самый простой и правильный способ пропустить тесты при сборке Gradle — использовать флаг -x (или его полную версию --exclude-task). Этот флаг позволяет исключить любую задачу (task) из графа выполнения. В вашем случае нужно исключить задачу test, так как она запускает выполнение тестов и также блокирует выполнение последующих задач check и финальной сборки.
Запустите сборку следующей командой:
gradle build -x test
Или, если вы хотите использовать полный синтаксис:
gradle build --exclude-task test
После этого Gradle выполнит все задачи, кроме test и тех, которые от него зависят (например, check). Ваш JAR-файл будет собран, а тесты — пропущены. Вы увидите в логах что-то вроде:
> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :jar
> Task :startScripts
> Task :distTar
> Task :distZip
> Task :assemble
> Task :build (excluded task: test)
Важные нюансы и дополнительные возможности
- Исключение нескольких задач: Если вы хотите исключить не только тесты, но и, например, статический анализ кода (lint), можно перечислить несколько флагов:
gradle build -x test -x checkstyleMain. - Постоянное отключение тестов: Если вы хотите отключить тесты навсегда (например, в CI-сборке, где тесты запускаются отдельной стадией), можно добавить в
build.gradleблокtest { enabled = false }. Но это не рекомендуется для локальной разработки, так как можно случайно забыть включить тесты обратно. - Отключение компиляции тестового кода: Если вы хотите сэкономить ещё больше времени и не компилировать тестовые классы, используйте
gradle build -x compileTestJava -x test. Однако обычно компиляция тестов занимает секунды, а выполнение — минуты, поэтому достаточно исключить толькоtest. - Использование Gradle Wrapper: Если вы используете
./gradlew(рекомендуется), команда будет выглядеть так:./gradlew build -x test.
Альтернативный подход: задача assemble
Вы также можете использовать задачу assemble, которая собирает все артефакты (JAR, WAR и т.д.) без запуска тестов и проверок. Это эквивалентно gradle build -x test -x check, но короче:
gradle assemble
Задача assemble включает в себя jar и другие упаковочные задачи, но не включает test и check. Это хороший вариант, если вам нужен только собранный артефакт.
Почему это работает?
Gradle использует ациклический граф зависимостей задач (DAG). Задача build зависит от check и assemble. Задача check зависит от test. Флаг -x test просто удаляет задачу test из графа выполнения, и все зависимости, которые вели к ней, становятся выполненными автоматически (Gradle считает их "выполненными" без фактического запуска).
Использование свойства проекта для условного отключения тестов
Если вы хотите иметь возможность гибко включать/отключать тесты через параметры командной строки без изменения build.gradle, можно использовать свойство проекта (project property). Добавьте в ваш build.gradle следующий блок:
test {
// Отключаем тесты, если передано свойство skipTests
enabled = !project.hasProperty('skipTests')
}
Теперь вы можете запускать сборку без тестов так:
gradle build -PskipTests
Флаг -P передаёт свойство skipTests в проект. Если свойство присутствует, test.enabled становится false, и тесты не выполняются. Если не передавать -PskipTests, тесты будут выполняться как обычно.
Этот подход удобен, если вы часто переключаетесь между сборками с тестами и без них, и не хотите каждый раз вспоминать флаг -x test. Также его можно комбинировать с CI-системами: например, в Jenkins или GitLab CI можно передавать -PskipTests для быстрых сборок, а для полноценных релизов — не передавать.
Минус: нужно один раз изменить build.gradle. Но это изменение безопасное и не ломает существующие команды.
Ответов пока нет.
Войдите чтобы оставить ответ