Wie man die Maven-Kompilierphase mit Test-Jar-Abhängigkeiten ausführt

8

Das Projekt, an dem ich arbeite, besteht aus mehreren Modulen, die mit Maven erstellt wurden. Der Testcode in einigen Modulen hängt vom Testcode anderer Module ab. Diese Abhängigkeiten sind wie folgt deklariert.

Im Abhängigkeitsmodul:

%Vor%

In dem Modul, das die Abhängigkeit vom vorherigen Modul hat:

%Vor%

Mit dieser Konfiguration kann die maven install -Phase erfolgreich ausgeführt werden. Der Versuch, die Phase compile oder test auszuführen, schlägt fehl, da die Abhängigkeit der Test-JAR-Datei nicht aufgelöst werden kann.

Wenn Sie sich das test-jar -Ziel ansehen, scheint es so konfiguriert zu sein, dass es während der Paket -Phase standardmäßig ausgeführt wird, was meiner Meinung nach die Ursache des Problems ist.

Dann habe ich versucht, dieses Ziel während der compile Phase zu erzwingen, indem ich die erste Konfiguration in

ändere %Vor%

Mit Blick auf die Debug-Protokolle kann ich sehen, dass das Ziel jetzt während der compile -Phase ausgeführt wird, aber auch dies:

%Vor%

Ich habe versucht, die Includes auf ** / * zu konfigurieren und bestätigt, dass das default testClassesDirectory auf die richtige gesetzt wurde, aber ich bekomme immer noch die gleiche Warnung.

Ich konnte sehen, dass der Ordner test-classes nach dem Ausführen der compile -Phase nicht existiert, was normal erscheint, obwohl er nach dem Ausführen der test -Phase existiert , und es enthält Dateien, ich bekomme immer noch die "JAR wird leer" Warnung.

Hat jemand eine Idee, diese Konfiguration zu korrigieren, damit ich die compile - oder -Prüfung erfolgreich durchführen kann?

    
killy971 24.08.2012, 07:07
quelle

3 Antworten

3

Ich bin der festen Überzeugung, dass Tests nur Teil eines Moduls sein sollten. Sie sollten sich nicht auf Tests in anderen Modulen verlassen. Es ist sehr schwer vorherzusagen, was passiert, wenn Sie die Tests so aktualisieren, dass sie sich anders verhalten.

Wenn Sie allgemeine Testdaten oder allgemeine Testklassen gemeinsam nutzen müssen, ist es besser, ein separates Modul mit dieser gemeinsam genutzten Testquelle zu erstellen. Und dann sollten alle Tests eine Abhängigkeit vom gemeinsam genutzten Test-Jar mit Scope-Test haben.

%Vor%

Stellen Sie sicher, dass Sie nur von common-test-util mit <scope>test</scope> abhängig sind und dann können Sie

aufrufen %Vor%

auf der obersten Ebene und alle Tests werden ausgeführt.

    
maba 24.08.2012, 08:02
quelle
4

Ich denke, dass diese Plugin-Konfiguration für Sie funktioniert.

Überschreiben Sie einfach den Übersprung bei der Ressourcenvorbereitung und -kompilierung auf false.

%Vor%     
Rain Young 04.09.2013 02:56
quelle
3

Ihr Problem hängt von der Abhängigkeitsauflösung in Multi-Modul-Builds ab. Es bezieht sich nicht speziell auf Testcode.

Ich habe genau dieses Setup. Ein übliches Modul enthält Laufzeitcode zusammen mit gemeinsamem Testcode (Testdoppelungen und Amocks usw.). Der Testcode wird von Tests in anderen Modulen verwendet. Es funktioniert sehr gut für uns.

"mvn compile" kompiliert nur Laufzeitcode.

Das Ausführen eines "mvn test-compile", "mvn test" oder "mvn package" auf der übergeordneten Ebene (Reaktor-Build) funktioniert einwandfrei. Der Reaktor kann alles aussortieren.

Wenn Sie einen Build auf Modulebene ausführen, müssen sich alle Abhängigkeiten dieses Moduls in einem Repo befinden. Dies bedeutet, dass Sie zuvor für jedes der abhängigen Module eine "mvn install" ausgeführt haben müssen. Diese Regel gilt sowohl für reguläre Abhängigkeiten als auch für Testabhängigkeiten.

Wenn Sie gehofft haben, dass es dem Eltern-Link bis zum Elternteil folgen würde und bis zu den anderen Modulen, muss ich Sie enttäuschen. Der übergeordnete Link wird nur verwendet, um allgemeine Einstellungen im Pom und nicht für die Abhängigkeitsauflösung zu übernehmen.

Persönlich mache ich fast immer einen vollständigen Reaktor vom Elternteil gebaut. Ich mache nur einen individuellen Modulaufbau, wenn ich vorher eine mvn Installation auf der Elternebene ausgeführt habe und ich weiß, dass sich die anderen Module nicht geändert haben.

Ich hoffe, das hilft.

    
AutomatedMike 24.08.2012 09:48
quelle