Совместное использование classов src / test между модулями в мультимодульном проекте maven

У меня мультимодульный проект Maven. Для этого примера рассмотрим два модуля:

  • data
  • consumer

У consumer модуля есть data модуля как зависимость.

data модуля объявляют кучу основных classов. Существуют тесты под управлением src/test которые используют их. Эти тесты требуют некоторого создания длинного объекта, поэтому у меня есть class с некоторыми методами утилиты, чтобы создавать эти объекты. Этот class утилиты ( SampleDataHelper ) находится в иерархии src/test .

У меня также есть некоторые тесты в модуле пользователя, которые должны создавать некоторые из этих объектов с длинной ветвью. Я хочу использовать class SampleDataHelper (определенный в data src/test ) в тестах, которые находятся в моем дереве consumer src/test . К сожалению, хотя data являются зависимостью от consumer , consumer не может видеть classы, которые существуют в data src/test .

Чтобы бороться с этим, я подумал, что могу создать еще один модуль ( data-test ) и перенести SampleDataHelper на него под src/main . Затем я бы включил data-test в качестве зависимости от объема data в тестовой области . К сожалению, это вводит циклическую зависимость: data используют data-test data-test , но data-test data также требуются data .

Единственное решение, которое я придумал, – разместить SampleDataHelper под data src/main в test пакете и надеяться, что никакой реальный код приложения никогда не называет его.

Как я могу поделиться classом SampleDataHelper между модулями, не помещая его под src/main ?

Ваш потребительский проект зависит от вашего проекта Data, поэтому мы рады, что Data должны быть созданы до Потребителя. В результате, используя методы, предложенные в комментариях , я бы гарантировал, что ваш проект данных содержит весь тестовый код, который вы хотите разделить, и сконфигурируйте POM для создания тестового JAR:

  org.apache.maven.plugins maven-jar-plugin 2.2    test-jar     

Тогда ваш потребительский проект будет зависеть как от обычного артефакта данных JAR, так и от дополнительного артефакта test-jar , конечно же, с областью тестирования:

  com.foo data 1.0 test-jar test  

Я использовал этот подход во многих случаях, и он работает хорошо.

Итак, проблема в том, что (некоторые) тесты в модуле data зависят от classа SampleDataHelper ? Вы можете переместить class SampleDataHelper в src/main модуля data-test , если вы в то же время переместите тесты (которые зависят от конкретного classа) с src/test data-test модуля data-test . Следовательно, больше не будет круговых зависимостей.

  • Запустить одно исполнение плагина Maven?
  • Как вы эффективно справляетесь с моментальными снимками maven-3?
  • Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 2.3.2: компиляция (компиляция по умолчанию)
  • Ошибка компиляции Maven: (используйте оператор 7 или выше для включения оператора бриллианта)
  • Как сделать файл войны в Eclipse
  • Maven 3 - Стоит?
  • Maven не находит тесты JUnit для запуска
  • заставить Maven скопировать зависимости в target / lib
  • Идея Intellij не может ничего разрешить в maven
  • Interesting Posts

    Java -version сообщает о неправильной версии на Mac OSX Mountain Lion

    Можете ли вы запустить собственное приложение для камеры из веб-приложения Html 5?

    Пользователи удалены из группы локальных администраторов после перезагрузки?

    Двойной монитор (IGP с графическим процессором) в Linux

    Неопределенный контейнер для хранения типично типизированных объектов в Java

    Настройка Linksys WRT54G для использования DHCP-сервера модема

    C # Использование Reflection для копирования свойств базового classа

    У SSDs фрагментированы, и если они это делают, это проблема?

    Windows 8 – пустой рабочий стол после установки драйверов NVIDIA

    Как я могу увеличить HTML-элемент в Firefox и Opera?

    Выполнение не выполнено для задачи ‘: app: compileDebugAidl’: aidl отсутствует

    Ошибка при установке программы на Windows 7 64-bit

    Как выполнить функцию controllerа AngularJS при загрузке страницы?

    Не удалось прочитать InputStream из Java Process (Runtime.getRuntime (). Exec () или ProcessBuilder)

    Angularjs $ http, похоже, не понимает «Set-Cookie» в ответе

    Давайте будем гением компьютера.