Maven пропустить тесты

226

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

mvn clean install -Dmaven.test.skip=true

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

mvn clean install -DskipTests

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

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

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

Prabhjot
источник
1
Какую версию maven-surefire-plugin вы используете? Это то же самое, что версия документа, которую вы читаете?
gerrytan
2
Один пропускает строительство, другой пропускает бег. Если вы хотите, чтобы оба использовали оба.
Эллиот Фриш
1
Можете ли вы предоставить подробную информацию об ошибке - сообщение об ошибке или трассировку стека?
Рагурам
1
Почему вы используете такую ​​старую версию Maven, в которой уже определен EoL .
хмарбайз
1
Так правда ли, что чтобы полностью пропустить все тесты, которые мне нужно использовать -Dmaven.test.skip=true -DskipTests? Один или другой может иногда быть опущен, в зависимости от обстоятельств, но кто хочет думать об этом ..
Лэндон Кун

Ответы:

121

Как вы заметили, -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 s не собраны, и любой модуль, который полагается на них, не сможет его собрать.

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

Mureinik
источник
2
Как решить эту проблему? В качестве моей онлайн-команды maven используйте -Dmaven.test.skip.
Нептун
2
@neptune какая проблема? Если у вас есть новый вопрос, пожалуйста, используйте новый пост, чтобы задать его.
Мюрейник,
58

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

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

mvn -DskipTests=true  package
gilwo
источник
29

Есть разница между каждым параметром.

  • -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

Денис Фредериччи
источник
15

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

В многомодульном проекте maven (содержит модули Aи B, где Bзависит A), вы можете добавить также тестовую зависимость от Afrom 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артефактом, то (хотя тесты не запустятся) и зависимость будет устранена.

Степан Вавра
источник
10

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

mvn clean install -DskipTests

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

Нирадж Триведи
источник
1

Во время компиляции 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>
Рададия Никунь
источник
1
Он пропускает тесты, даже когда вы делаетеmvn test
Пратик Сингхал