Maven: используйте специальные тестовые классы проекта A в проекте B - PullRequest
9 голосов
/ 25 февраля 2011

У меня есть проекты A и B, где B требует A. Внутри проекта AI есть UC служебного класса, который должен быть доступен только для JUnit-тестов и, следовательно, находится в src/test/java проекта A. Пока я пишу тесты по ИИ имеют доступ к UC. Однако, если я запускаю Maven и хочу, чтобы он выполнял тесты в B, я получаю ошибки компилятора, поскольку UC недоступен в B.

Очевидно, что Eclipse включает в себя все классы во всех исходных папках, когда он что-то компилирует (т.е. он знает об UC, когда я пишу тесты в B), тогда как Maven удаляет все тестовые классы в окончательной версии A.

У меня такой вопрос: что мне нужно сделать, чтобы UC был доступен в B, когда я запускаю его тесты с Maven?

Пожалуйста, поймите, что я новичок в Maven, и я думаю, что были заданы похожие вопросы. Однако я не могу преобразовать то, что там написано, в мою проблему и исправить ее.

Надеюсь, понятно, что я пытаюсь сделать ...

Ответы [ 3 ]

7 голосов
/ 25 февраля 2011

Пройдя еще раз поиск, я наконец нашел решение:

http://www.waltercedric.com/java-j2ee-mainmenu-53/361-maven-build-system/1349-maven-reusing-test-classes-across-multi-modules-projects.html 1

Я видел эту модель время от времени на других вопросах, так что, думаю, я просто не понял этого ... О, хорошо. * Eyeroll *

1 Эта исходная ссылка перестала работать. Я нашел его снова на archive.org (не обращайте внимания на неловкий макет).

2 голосов
/ 14 августа 2013

На странице maven-jar-plugin - http://maven.apache.org/plugins/maven-jar-plugin/usage.html - упоминается два способа. Простым подходом является создание артефакта тестового фляги, а затем обратиться к нему. (фрагменты, явно скопированные с официальной страницы)

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

, а затем обратитесь к нему с типом test-jar и областью тестирования в проектах, которым это необходимо:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>groupId</groupId>
      <artifactId>artifactId</artifactId>
      <type>test-jar</type>
      <version>version</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>

Если вам нужно много делать, вам, скорее всего, следует рассмотреть возможность переноса тестового кода в отдельные проекты.

0 голосов
/ 14 августа 2013

Я всегда находил тестовые банки неудобными. Они своеобразны, потому что они используются только после того, как они были развернуты в хранилище. В противном случае другие проекты не видят изменений. Вот почему я рекомендую создавать только обычные проекты, в которые вы можете поместить своих помощников по тестированию, а затем обращаться к ним с помощью зависимости области теста.

...