Я использую Maven 2.2.1 и для создания своего проекта я использовал эту команду
mvn clean install -Dmaven.test.skip=true
Тем не менее, сборка не удалась, сказав, что не может найти один из артефактов. Тем не менее, когда я использовал:
mvn clean install -DskipTests
все работало нормально.
До сих пор я думал, что эти 2 команды эквивалентны. Однако эта ссылка, по- видимому, -Dmaven.test.skip=true
также пропускает компиляцию тестовых случаев.
Однако это все еще не объясняло мне, почему одна команда работает, а другая - нет. Буду благодарен, если кто-нибудь, пожалуйста, объясните мне это.
-Dmaven.test.skip=true -DskipTests
? Один или другой может иногда быть опущен, в зависимости от обстоятельств, но кто хочет думать об этом ..Ответы:
Как вы заметили,
-Dmaven.test.skip=true
пропускает компиляцию тестов. Более того, он пропускает создание тестовых артефактов. Обычная практика для больших проектов - совместное использование утилит и базовых классов между модулями в одном проекте.Это достигается тем, что для модуля требуется
test-jar
предварительно созданный модуль:Если
-Dmaven.test.skip=true
(или просто-Dmaven.test.skip
) указано,test-jar
s не собраны, и любой модуль, который полагается на них, не сможет его собрать.Напротив, когда вы используете
-DskipTests
, Maven не запускает тесты, но компилирует их и создает тест-jar, делая его доступным для последующих модулей.источник
У меня была некоторая взаимозависимость с тестами, чтобы собрать пакет.
Следующая команда позволяет переопределить необходимость использования тестового артефакта для достижения цели:
источник
Есть разница между каждым параметром.
-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
источник
Я могу привести пример, который приводит к той же проблеме, но может не дать ответа на ваш вопрос. (Кроме того, в этом примере я использую свои знания Maven 3, которые могут не относиться к Maven 2.)
В многомодульном проекте maven (содержит модули
A
иB
, гдеB
зависитA
), вы можете добавить также тестовую зависимость отA
fromB
.Эта зависимость может выглядеть следующим образом:
(Для получения дополнительной информации см. https://maven.apache.org/guides/mini/guide-attached-tests.html ).
Обратите внимание, что в проекте
A
создается вторичный артефакт с классификатором, вtests
котором расположены тестовые классы и тестовые ресурсы.Если вы строите свой проект с помощью
-Dmaven.test.skip=true
, вы получите ошибку разрешения зависимостей, пока тестовый артефакт не найден в вашем локальном репозитории или внешних репозиториях. Причина в том, что тестовые классы не были скомпилированы, иtests
артефакт не был создан.Однако, если вы запустите сборку с
-DskipTests
вашимtests
артефактом, то (хотя тесты не запустятся) и зависимость будет устранена.источник
Чтобы пропустить тестовый пример во время чистой установки maven, я использовал параметр -DskipTests в следующей команде
в окно терминала
источник
Параметр -DskipTests может не работать в зависимости от версии верного плагина.
Источник: информация о параметрах Surefire
источник
Во время компиляции maven вы можете пропустить выполнение теста, добавив следующий плагин в pom.xml
источник
mvn test