Ich benutze Maven, um ein Multi-Modul-Projekt zu erstellen. Mein Modul 2 ist abhängig von Modul 1 src im Kompilierungsumfang und Modul 1 testet im Testumfang.
Modul 2 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
Das funktioniert gut. Angenommen, mein Modul 3 hängt von Modul1 src ab und wird zur Kompilierungszeit getestet.
Modul 3 -
<dependency>
<groupId>blah</groupId>
<artifactId>MODULE1</artifactId>
<version>blah</version>
<classifier>tests</classifier>
<scope>compile</scope>
</dependency>
Wenn ich mvn clean install
, mein Build läuft bis Modul 3, schlägt bei Modul 3 fehl, da die Testabhängigkeit von Modul 1 nicht aufgelöst werden konnte. Dann mache ich ein mvn install
auf Modul 3 alleine, gehe zurück und starte mvn install
auf meinem Elternteil pom, um es bauen zu lassen. Wie kann ich das beheben?
Ich habe Zweifel, was Sie versuchen, aber ich gehe davon aus, dass Sie die Tests, die Sie für ein Projekt (Modul1) erstellt haben, in einem anderen wiederverwenden möchten. Wie im Hinweis am Ende des Leitfadens zur Verwendung der angehängten Tests erklärt :
Beachten Sie, dass in früheren Ausgaben dieses Handbuchs die Verwendung von
<classifier>tests</classifier>
Anstelle von<type>test-jar</type>
Empfohlen wurde. Während dies derzeit in einigen Fällen funktioniert, funktioniert es während eines Reaktorbaus des Test-JAR-Moduls und aller Verbraucher nicht ordnungsgemäß, wenn eine Lebenszyklusphase vor der Installation aufgerufen wird. In einem solchen Szenario löst Maven die Test-JAR nicht aus der Ausgabe des Reaktor-Builds auf, sondern aus dem lokalen/fernen Repository. Anscheinend könnte die JAR aus den Repositorys veraltet sein oder vollständig fehlen und einen Build-Fehler verursachen (vgl. MNG-2045 ).
Um kompilierte Tests in eine JAR zu packen und für die allgemeine Wiederverwendung bereitzustellen, konfigurieren Sie zunächst maven-jar-plugin
Wie folgt:
<project>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Installieren Sie anschließend das Test-JAR-Artefakt wie gewohnt (mit mvn install
Oder mvn deploy
).
Um die Test-JAR zu verwenden, müssen Sie eine Abhängigkeit mit dem angegebenen Typ test-jar
Angeben:
<project>
...
<dependencies>
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
...
</project>
In Bezug auf meinen Kommentar zu Pascals Frage denke ich, dass ich eine passende Antwort gefunden habe:
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<phase>test-compile</phase>
</execution>
</executions>
<configuration>
<outputDirectory>${basedir}\target</outputDirectory>
</configuration>
</plugin>
</plugins>
Der Hauptunterschied hier, wie Sie hier sehen, ist der <phase>
Etikett.
Ich werde das Test-Jar erstellen und es wird in der Kompilierungsphase der Tests und nicht erst nach der Paketphase verfügbar sein.
Funktioniert bei mir.
As https://maven.Apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html sagt:
So erstellen Sie eine JAR-Datei mit Testklassen Wenn Sie eine JAR-Datei mit Testklassen erstellen möchten, möchten Sie diese Klassen wahrscheinlich wiederverwenden. Es gibt zwei Möglichkeiten, dies zu lösen:
The easy way
Erstellen Sie eine angehängte JAR-Datei mit den Testklassen aus dem aktuellen Projekt, und verlieren Sie die Abhängigkeiten für den transitiven Testbereich.
The preferred way
Erstellen Sie ein separates Projekt mit den Testklassen.
Bitte lesen Sie diesen Artikel für Details.