Ich habe ein Multi-Modul Maven Projekt mit drei Modulen core
, utils
und test-utils
Java9 Multi-Modul Maven Projekt-Test Abhängigkeiten
Kern die folgenden Abhängigkeiten Definition module-info.java
<dependency>
<groupId>my.project</groupId>
<artifactId>utils</artifactId>
</dependency>
<dependency>
<groupId>my.project</groupId>
<artifactId>test-utils</artifactId>
<scope>test</scope>
</dependency>
Ich habe hinzugefügt Java 9 hat Definitionen für alle drei Module und core
sieht so aus:
module my.project.core {
requires my.project.utils;
}
Allerdings kann ich nicht herausfinden, wie man die Testklassen core
bekommt, um die test-utils
Klassen während der Testausführung sehen zu können. Wenn maven-surefire-plugin
den Testlauf versucht, bekomme ich Klasse nicht gefunden.
Wenn ich hinzufügen, ein requires my.project.testutils;
-core
‚s module-info.java
:
module my.project.core {
requires my.project.utils;
requires my.project.testutils; //test dependency
}
Dann bei der Kompilierung bekomme ich einen Fehler, dass das my.project.testutils
Modul nicht (vermutlich gefunden werden, weil es nur ist hereingebracht als Test Abhängigkeit).
Wie arbeitet man mit Testabhängigkeiten in einer Java 9 modularen Welt? Aus offensichtlichen Gründen möchte ich nicht, dass mein Hauptcode Testabhängigkeiten einholt. Fehle ich etwas?
Ich bin kein Maven Maven und habe nicht das Surefire-Plugin verwendet, aber die 'Modul-info.java' mit den beiden' erfordert' ist definitiv die falsche Richtung. Im Allgemeinen werden Tests in Java 9 durch das "Patchen" eines Moduls erleichtert (Maven und Gradle neigen dazu, dies zu abstrahieren). Auf einer anderen Anmerkung ist es unklar, ob Sie dieses Dokument gesehen haben: toolchains? - http://maven.apache.org/surefire/maven-surefire-plugin/java9.html –
Dies verwendet weder das Surefire-Plugin, noch 'test' scope (also werde ich es nicht als Antwort schreiben), Aber falls das hilft, hier ist ein kleines Java9-Beispiel mit Maven - https://github.com/codetojoy/WarO_Java_9_Maven –
@MichaelEaster Der Teil über dem Patch-Modul ist dort richtig, aber der Toolchain-Teil scheint mit der Frage nichts zu tun zu haben. – nullpointer