Ich habe ein Maven-Projekt mit mehreren Modulen. Betrachten Sie für dieses Beispiel zwei Module:
data
consumer
Modul consumer
Modul hat data
als Abhängigkeit.
Modul data
deklariert eine Reihe von Kernklassen. Es gibt Tests unter src/test
die sie benutzen. Diese Tests erfordern eine langwierige Objekterstellung, daher habe ich eine Klasse mit einigen Hilfsmethoden darin, um diese Objekte zu erstellen. Diese Utility-Klasse (SampleDataHelper
) ist in dem src/test
Hierarchie.
Ich habe auch einige Tests in der consumer
Modul, das einige dieser langatmigen Objekte erstellen muss. Ich möchte meine verwenden SampleDataHelper
Klasse (definiert in data src/test
) in Tests, die sich in meinem befinden consumer src/test
Baum. Leider, obwohl data
ist eine Abhängigkeit von consumer
, consumer
kann die Klassen nicht sehen, die unter vorhanden sind data src/test
.
Um dem entgegenzuwirken, dachte ich, ich könnte etwas erschaffen Ein weiterer Modul (data-test
) und bewegen SampleDataHelper
dazu unter src/main
. Dann würde ich einschließen data-test
Als ein Testumfang Abhängigkeit von data
. Leider führt dies zu einer zirkulären Abhängigkeit: data
Verwendet data-test
aber data-test
erfordert auch data
.
Die einzige Lösung, die ich mir ausgedacht habe, ist zu platzieren SampleDataHelper
unter data src/main
unter einem test
Paket und hoffen, dass kein echter Anwendungscode es jemals aufruft.
Wie kann ich meine teilen SampleDataHelper
Klasse zwischen den Modulen ohne unterlegen src/main
?
Sehen Sie sich diese Antwort an. Ich denke, es sollte dir helfen.
– Andreas Logwinow
6. Februar 2013 um 6:31 Uhr
Für zukünftige Leser: Maven-Leitfaden zur Verwendung angehängter Tests
– Greg Kopff
6. Februar 2013 um 6:36 Uhr
@AndrewLogvinov: Würde Ihre verknüpfte Antwort nicht einen “zweistufigen” Build erfordern? Zum ersten bauen und einsetzen ein Modul (
data
) bevor ich überhaupt mein zweites Modul kompilieren kann (consumer
).– Greg Kopff
6. Februar 2013 um 6:42 Uhr
ich denke du könnte bei der Verwendung auf einige Probleme stoßen
mvn package
aber es sollte in einem einzigen Schritt funktionieren, wenn Sie es verwendenmvn install
odermvn deploy
. Nur eine schnelle Anmerkung. In einem unserer großen Projekte haben wir einen Wrapper über Junit’sTestBase
und es befindet sich insrc/main
was ich auch nicht für eine gute Idee halte.– Andreas Logwinow
6. Februar 2013 um 6:58 Uhr