java-maven2: как включить jar в качестве зависимости в pom, чтобы я мог получить доступ к тестовым классам или классам в папке src / test / java - PullRequest
2 голосов
/ 07 июня 2010

У меня есть набор функциональных jar-файлов (более 3), которые тестируют мой исходный код. Эти jar содержат только тестовые классы и вспомогательные классы asserter. Я создаю новый jar-файл производительности, который будет импортировать все функциональные тесты из этих jar-файлов, чтобы все они могли выполняться одновременно. Но когда я включаю их в качестве тестовых зависимостей в pom текущего jar, я вижу только классы в src / main / java. Как я могу включить эти функциональные jar как зависимые jar, чтобы я также мог ссылаться на классы в src / test / java. Другими словами, как мне ссылаться на тестовые классы в других банках. Каким образом я должен включить зависимость как.

Спасибо за вашу поддержку.

Ответы [ 4 ]

4 голосов
/ 07 июня 2010

Первый вариант

Поместите свой общий «тестовый» код в отдельный модуль (в src/main/java) и объявите зависимость от этого модуля с областью действия test в модулях, которым требуется общий код:

<dependency>
  <groupId>my.group.id</groupId>
  <artifactId>testing-framework</artifactId>
  <version>${project.version}</version>
  <scope>test</scope>
</dependency>

Это обычная практика, в этом нет ничего плохого.

Второй вариант

Используйте Плагин Maven JAR и его цель jar:test-jar, чтобы построить JAR тестовых классов для текущего проекта как часть package phase (jar:test-jar связывается по умолчанию с package):

<project>
  <build>
    <plugins>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <version>2.3.1</version>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
  </build>
</project>

Чтобы использовать прикрепленный тестовый JAR, созданный выше, рекомендуется указать зависимость от основного артефакта с указанным типом 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>

См. Обсуждение в нижней части Руководство по использованию прилагаемых тестов , чтобы узнать, почему <type>test-jar</type> предпочтительнее, чем <classifier>tests</classifier>.

3 голосов
/ 07 июня 2010

Код в src/test/java по умолчанию не включен в jar (я считаю, что это хорошо, и я бы с осторожностью его изменил, даже если бы мог).

Я считаю, что помещать общий тестовый код в отдельный модуль maven src/main/java очень хорошая практика. Затем просто включите этот модуль в качестве тестовой зависимости, где вам это нужно.

2 голосов
/ 07 июня 2010

Либо придерживайтесь пути, предложенного Лаури , либо используйте небольшое изменение, если у вас нет выделенного тестового артефакта, но есть общий артефакт, который также имеет общие тестовые классы в src / test / java.

В этом проекте используйте test-jar mojo, чтобы создать и прикрепить тестовый jar этого проекта

Теперь в производных проектах вы можете включить такую ​​зависимость:

<dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <scope>test</scope>
    <classifier>test</classifier>
</dependency>

таким образом, вам не нужно создавать отдельный тестовый проект, если у вас уже есть проект commons

1 голос
/ 07 июня 2010

mvn package не объединяет тестовые классы и ресурсы.Поэтому вам нужно поместить зависимости в src / main / java.

Всякий раз, когда я делаю это, я создаю jar-проект под названием someproj-testutils и имею вспомогательные классы или базовые тестовые классы и ресурсы в обычномsrc/main/ местоположений, а затем ссылаться на someproj-testutils как на тестовую область dep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...