← Назад к вопросам

Как отключить тесты в Maven

1.0 Junior🔥 71 комментариев
#Другое#Тестирование

Комментарии (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

Таблица способов отключения

СпособКомандаКогда использовать
Параметр CLImvn clean package -DskipTestsЛокальная разработка
pom.xml config<skipTests>true</skipTests>Всегда пропускать
Profilemvn clean package -P devРазные конфигурации
Environment varexport MAVEN_SKIP_TESTS=trueСкрипты, CI/CD
Exclude pattern<exclude>**/IT.java</exclude>Конкретные файлы
Run filtermvn test -Dtest=*ServiceTestВыбранные тесты
Docker ARGdocker build --build-arg SKIP_TESTS=trueContainerized builds

Лучшие практики

Делай:

  • Используй -DskipTests для локальной разработки (быстро)
  • Всегда запускай тесты перед commit'ом
  • Используй profiles для разных сценариев
  • В CI/CD запускай ВСЕ тесты перед merge'ом
  • Документируй когда и почему пропускаются тесты

Не делай:

  • Не коммити с пропущенными тестами
  • Не отключай тесты в production branch'е
  • Не забывай потом их включить обратно
  • Не используй -Dmaven.test.skip=true если нужна компиляция тестов

Выбирай способ в зависимости от контекста: локальная разработка vs CI/CD pipeline.

Как отключить тесты в Maven | PrepBro