Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как отключить тесты в Maven
В разработке иногда нужно пропустить тестирование при сборке проекта. Maven предоставляет несколько способов это сделать.
1. Параметр командной строки (самый быстрый способ)
# Пропустить все тесты
mvn clean package -DskipTests
# Полностью отключить fase testing
mvn clean package -Dmaven.test.skip=true
# Разница:
# -DskipTests — тесты НЕ будут скомпилированы, НО фаза test пропущена
# -Dmaven.test.skip — тесты НЕ скомпилированы И не выполняются
# Пропустить конкретный модуль в multi-module проекте
mvn clean package -DskipTests -pl :specific-module
2. Конфигурация в pom.xml
<!-- Отключить тесты глобально для всего проекта -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
3. Отключение для конкретной конфигурации (profile)
<!-- В профиле для разработки -->
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!-- В профиле для продакшена тесты РУН (по умолчанию) -->
<profile>
<id>prod</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<!-- Использование -->
<!-- mvn clean package -P dev (пропускает тесты) -->
<!-- mvn clean package -P prod (запускает тесты) -->
4. Пропуск только интеграционных тестов
<build>
<plugins>
<!-- Пропускать IT тесты по умолчанию -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<skipITs>true</skipITs>
<!-- или -->
<!-- <skip>true</skip> -->
</configuration>
</plugin>
<!-- Unit тесты запускаются -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>
</plugins>
</build>
5. Исключение файлов тестов
<!-- Запускаются ВСЕ тесты, но определенные исключены -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/IntegrationTest.java</exclude>
<exclude>**/performance/*Test.java</exclude>
<exclude>**/*SlowTest.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
6. Запуск только определённых тестов
# По паттерну класса
mvn clean test -Dtest=UserServiceTest
# По паттерну нескольких классов
mvn clean test -Dtest=*ServiceTest
# По названию метода
mvn clean test -Dtest=UserServiceTest#testFindUser
# Несколько методов
mvn clean test -Dtest=UserServiceTest#testFind*,testCreate*
# По тегам (требует JUnit 5)
mvn clean test -Dgroups=integration
7. Conditional выполнение в pom.xml
<!-- Отключить тесты в конкретной фазе -->
<build>
<plugins>
<!-- В phase verify пропускаются тесты если переменная skip-tests=true -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>${skip-tests}</skip>
</configuration>
</plugin>
</plugins>
</build>
<!-- Использование -->
<!-- mvn clean package -Dskip-tests=true -->
8. Environment variables
# Linux/Mac
export MAVEN_SKIP_TESTS=true
mvn clean package -DskipTests=$MAVEN_SKIP_TESTS
# В pom.xml
<configuration>
<skipTests>${env.MAVEN_SKIP_TESTS}</skipTests>
</configuration>
9. CI/CD pipelines
# GitHub Actions example
name: Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Сборка БЕЗ тестов
- name: Build without tests
run: mvn clean package -DskipTests
# Или с тестами но в отдельном job'е
- name: Run tests
run: mvn clean test
# GitLab CI example
build:
stage: build
script:
# Быстрая сборка для всех коммитов
- mvn clean package -DskipTests
tags:
- docker
test:
stage: test
script:
# Тесты запускаются в отдельном job'е
- mvn clean test
only:
- merge_requests
- main
10. Docker для сборки
# Dockerfile с опцией скипа тестов
FROM maven:3.8.1-openjdk-17 AS build
# Build argument для контроля тестов
ARG SKIP_TESTS=false
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests=${SKIP_TESTS}
FROM openjdk:17-slim
COPY --from=build /app/target/*.jar app.jar
CMD ["java", "-jar", "app.jar"]
# Построение БЕЗ тестов (быстро)
docker build --build-arg SKIP_TESTS=true -t myapp:dev .
# Построение С тестами (медленно, но полная валидация)
docker build --build-arg SKIP_TESTS=false -t myapp:release .
11. Maven settings.xml (глобальная конфигурация)
<!-- ~/.m2/settings.xml -->
<settings>
<profiles>
<profile>
<id>skip-tests-profile</id>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
</profiles>
<!-- Активировать по умолчанию -->
<activeProfiles>
<activeProfile>skip-tests-profile</activeProfile>
</activeProfiles>
</settings>
<!-- Использование -->
<!-- mvn clean package (будут пропущены тесты) -->
<!-- mvn clean package -P !skip-tests-profile (запустить тесты) -->
12. Maven Wrapper
# Использование ./mvnw вместо mvn
./mvnw clean package -DskipTests
# С параметрами
./mvnw -U clean package -DskipTests -X
Таблица способов отключения
| Способ | Команда | Когда использовать |
|---|---|---|
| Параметр CLI | mvn clean package -DskipTests | Локальная разработка |
| pom.xml config | <skipTests>true</skipTests> | Всегда пропускать |
| Profile | mvn clean package -P dev | Разные конфигурации |
| Environment var | export MAVEN_SKIP_TESTS=true | Скрипты, CI/CD |
| Exclude pattern | <exclude>**/IT.java</exclude> | Конкретные файлы |
| Run filter | mvn test -Dtest=*ServiceTest | Выбранные тесты |
| Docker ARG | docker build --build-arg SKIP_TESTS=true | Containerized builds |
Лучшие практики
✅ Делай:
- Используй
-DskipTestsдля локальной разработки (быстро) - Всегда запускай тесты перед commit'ом
- Используй profiles для разных сценариев
- В CI/CD запускай ВСЕ тесты перед merge'ом
- Документируй когда и почему пропускаются тесты
❌ Не делай:
- Не коммити с пропущенными тестами
- Не отключай тесты в production branch'е
- Не забывай потом их включить обратно
- Не используй
-Dmaven.test.skip=trueесли нужна компиляция тестов
Выбирай способ в зависимости от контекста: локальная разработка vs CI/CD pipeline.