Maven (todsichere): copy Testressourcen aus src / test / java
-
26-09-2019 - |
Frage
Maven Surefire (testing) Plugin mvn test-compile
kopiert Dateien in src/test/resources
zu target/test-classes
. Es kompiliert .java
in src/test/java
und kopiert die kompilierten .class
Dateien target/test-classes
.
Aber es kopiert keine Ressourcen aus src/test/java
, und es ist bequemer Lage sein, Testressourcen im selben Verzeichnis wie die .java
Klassen setzen sie Ressourcen für die, als in einer parallelen Hierarchie in src/test/resources
.
Ist es möglich, Maven zu bekommen Ressourcen von src/test/java
zu kopieren?
Lösung
Die Ressource Kopieren alle von der Maven-Ressource-Plugin durchgeführt wird, und wenn Sie die doc davon lesen, werden Sie sehen, wie aus src / test / java Kopieren von Ressourcen hinzuzufügen.
Siehe http://maven.apache.org/plugins/maven-resources- plugin / testResources-mojo.html für das Test-Ressourcen Ziel, die in dem Standard-Lebenszyklus enthalten ist.
Und dann finden Sie unter http://maven.apache.org/pom.html und sucht <testResources>
.
Andere Tipps
bmargulies gab die Antwort , aber lassen Sie mich in einigen Details füllen.
<testresources>
kann den <build>
Knoten des Projektes POM hinzugefügt werden, wie folgt:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
Das kopiert alles in src/test/java
- einschließlich der .java
Quellcode, die wir nicht wollen.
Es ist auch (als bmargulies nur angedeutet) überschreibt und ersetzt die Standard <testResources>
Einstellung im Standard-Mutter POM, dass alle anderen POM, vererben (es sei denn, dass Vererbung geändert wird). Die Standard-Mutter Kopien src/test/resources
, so durch, dass überschreiben, bekommen wir nicht, dass wie üblich kopiert, was wir nicht wollen. (Insbesondere mein ganzer Grund dafür ist unitils zu verwenden, die die unitils.properties
Datei kopiert will -. Und das ist (für mich jedenfalls) in src/test/resources
So wir wieder add src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Das Kopie in der Reihenfolge aufgeführt, so dass für Dateien, die in sowohl /src/test/java
existieren (und Unterverzeichnisse) und in /src/test/resources
(und Unterverzeichnissen), die src/test/resources
Version ist die, dass Ende in test-classes
auf.
Nun wir müssen nur nicht kopieren Sie die Dateien .java
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Der einzige Weg, es funktionierte für mich, wenn ich meine Testkonfiguration in src/test/resources
Ordner speichern (analog src/test/java
für Quelldateien). Dateien aus diesem Ordner auf dem target/test-classes
Ordner kopiert, die während des Tests die Ausführung auf dem Classpath ist. Ich weiß nicht, warum, aber die nächste Konfiguration hat nicht funktioniert für mich:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Ist es möglich, Kopie zu erhalten maven Ressourcen aus src / test / java?
Ja, das ist leicht mit der erreichten antrun Plugin .