Зависимость теста 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 72

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, содержащий тестовые классы, вы, вероятно, захотите повторно использовать эти классы. Есть два способа решить эту проблему:

  1. The easy way создайте прикрепленный jar с тестовыми классами из текущего проекта и освободите его транзитивную область тестирования зависимости.

  2. The preferred way создайте отдельный проект с тестовыми классами.

пожалуйста, прочитайте эту статью для деталей.