Тесты 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