Зависимость теста Maven в многомодульном проекте
я использую maven для создания многомодульного проекта. Мой модуль 2 зависит от модуля 1 src в области компиляции и тестов модуля 1 в области тестирования.
Модуль 2 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
это прекрасно работает. Скажем, мой модуль 3 зависит от Module1 src и тестов во время компиляции.
Модуль 3 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>compile</scope>
</dependency>
когда я запускаю mvn clean install
, моя сборка выполняется до модуля 3, терпит неудачу в модуле 3, поскольку он не может разрешить зависимость теста модуля 1. Тогда я делаю mvn install
модуль 3 только, возвращайся и беги mvn install
на моем родительском pom, чтобы сделать его построить. Как я могу это исправить?
3 ответа:
у меня есть сомнения в том, что вы пытаетесь сделать, но я предполагаю, что вы хотите повторно использовать тесты, которые вы создали для проекта (module1) в другом. Как поясняется в примечании внизу руководство по использованию прилагаются тесты:
обратите внимание, что в предыдущих выпусках этого руководства предлагалось использовать
<classifier>tests</classifier>
вместо<type>test-jar</type>
. В то время как это в настоящее время работает в некоторых случаях, он не работает должным образом во время сборки реактора тестового модуля JAR и любого потребитель, если вызывается фаза жизненного цикла до установки. В таком сценарии Maven не будет разрешать тестовый JAR из выходных данных сборки реактора, но из локального/удаленного репозитория. По-видимому, JAR из репозиториев может быть устаревшим или полностью отсутствовать, вызывая сбой сборки (см. MNG-2045).Итак, во-первых, чтобы упаковать скомпилированные тесты в банку и развернуть их для общего повторного использования, настройте
maven-jar-plugin
как следует:<project> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
затем установите / разверните артефакт test JAR как обычно (используя
mvn install
илиmvn deploy
).наконец, чтобы использовать тестовую банку, вы должны указать зависимость с указанным типом
test-jar
:<project> ... <dependencies> <dependency> <groupId>com.myco.app</groupId> <artifactId>foo</artifactId> <version>1.0-SNAPSHOT</version> <type>test-jar</type> <scope>test</scope> </dependency> </dependencies> ... </project>
Что касается моего комментария к вопросу Паскаля, я думаю, что нашел правильный ответ :
<plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.2</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> <phase>test-compile</phase> </execution> </executions> <configuration> <outputDirectory>${basedir}\target</outputDirectory> </configuration> </plugin> </plugins>
главное отличие здесь, как вы видите здесь является
<phase>
тег.Я создам test-jar, и он будет доступен на этапе компиляции тестов, а не только после фазы пакета.
работает для меня.
как https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html говорит:
Как создать банку, содержащую тестовые классы Когда вы хотите создать jar, содержащий тестовые классы, вы, вероятно, захотите повторно использовать эти классы. Есть два способа решить эту проблему:
The easy way
создайте прикрепленный jar с тестовыми классами из текущего проекта и освободите его транзитивную область тестирования зависимости.
The preferred way
создайте отдельный проект с тестовыми классами.пожалуйста, прочитайте эту статью для деталей.