2017-11-06 2 views
6

Ich habe ein Multi-Modul Maven Projekt mit drei Modulen core, utils und test-utilsJava9 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?

+3

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 –

+1

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 –

+0

@MichaelEaster Der Teil über dem Patch-Modul ist dort richtig, aber der Toolchain-Teil scheint mit der Frage nichts zu tun zu haben. – nullpointer

Antwort

4

Wenn maven und java9 my.project.testutils eine Testbereichsabhängigkeit ist, müssen Sie diese nicht explizit (requires) in den Moduldeskriptor einschließen.


Die Testabhängigkeiten werden über den Klassenpfad selbst übernommen. So können Sie einfach die testutils entfernen und es würde von maven während der Tests gepatcht werden.

module my.project.core { 
    requires my.project.utils; 
} 

zum slide 30 pertaining to maven-compiler-plugin.

enter image description here

Siehe Ich würde auch vorschlagen, dass Sie einen Blick auf Where should I put unit tests when migrating a Java 8 project to Jigsaw und this comment von Robert über die Durchführung der Bestätigung, die folgt maven.

bearbeiten: eine sample project Zeichnung eine Analogie, dass das Hauptmodul ist die gleiche wie Ihre core, die Abhängigkeit von guava Erstellt gleiche wie Ihr utils und die junit Abhängigkeit ist als testutils gleich.

Verwandte Themen