Тесты Maven

Я использую Maven 2.2.1 и для сборки моего проекта я использовал эту команду

mvn clean install -Dmaven.test.skip=true

Однако сборка не подтвердилась, сказав, что не может найти один из артефактов. Однако, когда я использовал:

mvn clean install -DskipTests

все работало нормально.

До сих пор я думал, что эти 2 команды эквивалентны. Однако эта ссылка кажется, что -Dmaven.test.skip=true также пропускает компиляцию тестовых примеров.

Однако это все еще не объясняло мне, почему одна команда работает, а другая - нет. Будем благодарны, если кто-нибудь объяснит мне это.

Ответ 1

Как вы заметили, -Dmaven.test.skip=true пропускает компиляцию тестов. Более того, он пропускает создание тестовых артефактов. Обычная практика для больших проектов - совместное использование утилит и базовых классов между модулями в одном проекте.

Это достигается тем, что для модуля требуется test-jar ранее созданного модуля:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

Если -Dmaven.test.skip=true (или просто -Dmaven.test.skip), test-jar -Dmaven.test.skip test-jar не -Dmaven.test.skip, и любой модуль, использующий их, не сможет его собрать.

Напротив, когда вы используете -DskipTests, Maven не запускает тесты, но компилирует их и создает тестовый jar, делая его доступным для последующих модулей.

Ответ 2

У меня была некоторая взаимосвязь с тестами для сборки пакета.

Следующая команда позволяет переопределить потребность в артефакте теста для достижения цели:

mvn -DskipTests=true  package

Ответ 3

Я могу привести пример, который приводит к той же проблеме, но он может не дать вам ответа на ваш вопрос. (Кроме того, в этом примере я использую свои знания Maven 3, которые могут не применяться к Maven 2.)

В многомодульном проекте maven (содержит модули A и B, где B зависит от A), вы также можете добавить тестовую зависимость от A от B.

Эта зависимость может выглядеть следующим образом:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(дополнительную информацию см. в https://maven.apache.org/guides/mini/guide-attached-tests.html)
Обратите внимание, что проект A создает вторичный артефакт с классификатором tests, где расположены тестовые классы и тестовые ресурсы.

Если вы создаете проект с помощью -Dmaven.test.skip=true, вы получите ошибку разрешения зависимостей, если артефакт теста не найден в локальном репо или внешних репозиториях. Причина в том, что классы тестов не были скомпилированы, а артефакт tests не был создан.
Однако, если вы запустите свою сборку с помощью -DskipTests, будет создан артефакт tests (хотя тесты не будут выполняться), и зависимость будет разрешена.

Ответ 4

Во время компиляции maven вы можете пропустить выполнение теста, добавив следующий плагин в pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>

Ответ 5

Чтобы пропустить тестовый пример во время чистой установки maven, я использовал параметр -DskipTests в следующей команде

mvn clean install -DskipTests

в окно терминала

Ответ 6

Параметр -DskipTests может не работать в зависимости от версии верного плагина.

Вы можете использовать "-Dmaven.test.skip.exec" вместо "-DskipTests"

Источник: информация о параметрах Surefire

Ответ 7

Существует разница между каждым параметром.

  • -DskipTests пропускает фазу выполнения тестов, это означает, что в конце этого процесса вы скомпилируете свои тесты.

  • -Dmaven.test.skip = true пропустить этап компиляции и запуска тестов.

Поскольку параметр -Dmaven.test.skip = true пропускает компиляцию, у вас нет артефакта тестов.

Для получения дополнительной информации просто прочитайте документацию по серфингу: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html