У меня есть многомодульный проект Maven. Для этого примера рассмотрим два модуля:
data
consumer
Модуль consumer
имеет модуль data
как зависимость.
Модуль data
объявляет набор основных классов. Есть тесты под src/test
то, что их используют. Эти тесты требуют сложного создания объектов, поэтому у меня есть класс с некоторыми служебными методами для создания этих объектов. Этот служебный класс ( SampleDataHelper
) находится в src/test
иерархии.
У меня также есть несколько тестов в consumer
модуле, которые должны создать некоторые из этих многословных объектов. Я хочу использовать свой SampleDataHelper
класс (определенный в data src/test
) в тестах, которые находятся в моем consumer src/test
дереве. К сожалению, несмотря на то, что он data
является зависимостью consumer
, consumer
не может видеть классы, которые существуют в data src/test
.
Чтобы бороться с этим, я подумал, что могу создать еще один модуль ( data-test
) и перейти SampleDataHelper
к нему под src/main
. Затем я бы включил data-test
в качестве тестовой области зависимость data
. К сожалению, здесь возникает циклическая зависимость: data
использует data-test
, но data-test
также требует data
.
Единственное решение , которое я придумал это место SampleDataHelper
под data src/main
под test
пакетом и надеждой , что никакой реальный код приложения никогда не называет его.
Как я могу поделиться своим SampleDataHelper
классом между модулями, не помещая его под src/main
?
data
), прежде чем я смогу даже скомпилировать свой второй модуль ( consumer
).
mvn package
, но он должен работать нормально в одноэтапной сборке, когда вы используете mvn install
или mvn deploy
. Просто небольшое примечание. В одном из наших крупных проектов у нас есть оболочка над junit, TestBase
и она находится в src/main
которой я тоже не считаю хорошей идеей.