Mam wielomodułowy projekt Mavena. Na potrzeby tego przykładu rozważ dwa moduły:
data
consumer
Moduł consumer
ma moduł data
jako zależność.
Moduł data
deklaruje kilka podstawowych klas. Istnieją testy, src/test
które z nich korzystają. Te testy wymagają długiego tworzenia obiektów, więc mam klasę z kilkoma metodami użytkowymi do tworzenia tych obiektów. Ta klasa narzędziowa ( SampleDataHelper
) znajduje się w src/test
hierarchii.
Mam też kilka testów w consumer
module, które wymagają stworzenia niektórych z tych długich obiektów. Chcę używać mojej SampleDataHelper
klasy (zdefiniowanej w data src/test
) w testach znajdujących się w moim consumer src/test
drzewie. Niestety, mimo że data
jest to zależność consumer
, consumer
nie można zobaczyć klas, które istnieją w ramach data src/test
.
Aby temu zaradzić, pomyślałem, że mógłbym utworzyć kolejny moduł ( data-test
) i przejść SampleDataHelper
do niego pod src/main
. Następnie dodałbym data-test
jako zależność zakresu testowegodata
. Niestety, wprowadza to zależność cykliczną: data
używa data-test
, ale data-test
także wymaga data
.
Jedynym rozwiązaniem mam wymyślić ma miejsce SampleDataHelper
pod data src/main
ramach test
pakietu i nadziei, że żaden prawdziwy kod aplikacji kiedykolwiek nazywa go.
Jak mogę udostępniać moje SampleDataHelper
zajęcia między modułami bez umieszczania ich poniżej src/main
?
data
), zanim będę mógł skompilować drugi moduł ( consumer
).
mvn package
, ale powinna działać dobrze w jednym etapie kompilacji podczas korzystania mvn install
lub mvn deploy
. Tylko krótka notatka. W jednym z naszych dużych projektów mamy opakowanie na junit TestBase
i jest ono zlokalizowane, w src/main
którym również nie uważam za dobry pomysł.