Пропуск проб Maven


225

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

mvn clean install -Dmaven.test.skip=true

Однак збірка не вдалась, сказавши, що не вдалося знайти жодного артефакту. Однак коли я використовував:

mvn clean install -DskipTests

все працювало чудово.

Поки я думав, що ці 2 команди є рівнозначними. Однак, схоже , це посилання говорить про те, що -Dmaven.test.skip=trueтакож пропускає складання тестових випадків.

Однак це все ще не пояснило мені, чому одна команда працює, а інша - ні. Буду вдячний, якщо хто-небудь пояснить це мені.


1
Яку версію плагіна Maven-surefire ви використовуєте? Це те саме, що і док-версію, яку ви читаєте?
геррітан

2
Один пропускає будівлю, інший пропускає біг. Якщо ви хочете, обидва використовуйте обидва.
Елліот Фріш

1
Чи можете ви надати деталі відмови - повідомлення про помилку чи стек-трек?
Рагурам

1
Чому ви використовуєте таку старішу версію Maven, яка вже визначена EoL .
khmarbaise

1
Так це правда, що для повного пропуску всього тесту, який я маю використовувати -Dmaven.test.skip=true -DskipTests? Те, чи інше іноді можна пропустити, залежно від обставин, але хто хоче подумати над цим ..
Ландон Кун

Відповіді:


120

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

На противагу цьому, коли ви використовуєте -DskipTests, Maven не запускає тести, але він компілює їх і будує тестову банку, роблячи її доступною для наступних модулів.


2
Як вирішити цю проблему? Як моя онлайн команда Maven використовуйте -Dmaven.test.skip.
Нептун

2
@neptune яка проблема? Якщо у вас є нове запитання, будь ласка, скористайтеся новою публікацією, щоб задати його.
Мурейник

58

Я мав деяку взаємозалежність з тестами для того, щоб скласти пакет.

Наступна команда вдається перемогти потребу в тестовому артефакті для досягнення мети:

mvn -DskipTests=true  package

29

Між кожним параметром існує різниця.

  • -DskipTests пропускає запущені етапи тестів, це означає, що в кінці цього процесу ви будете складені ваші тести.

  • -Dmaven.test.skip = Фаза перевірки компіляції та запуску тестів.

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

Для отримання додаткової інформації просто прочитайте документацію про пожежу: 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), ви можете також додати тестову залежність від 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артефактом буде проводитися (хоча тести не будуть працювати) і залежність буде вирішена.


10

Щоб пропустити тестовий випадок під час Maven clean install, я використовував параметр -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
Пратік Сінгал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.