Maven Surefire (Test) Pluginmvn test-compile
kopiert Dateien in src/test/resources
nach target/test-classes
. Er übersetzt .Java
in src/test/Java
und kopiert die kompilierten .class
-Dateien nach target/test-classes
.
Es werden jedoch keine Ressourcen aus src/test/Java
kopiert, und es ist bequemer, Testressourcen in demselben Verzeichnis wie die .Java
-Klassen ablegen zu können, für die sie Ressourcen sind, als in einer parallelen Hierarchie in src/test/resources
.
Kann Maven Ressourcen von src/test/Java
kopieren?
Das Kopieren der Ressource wird vom maven-resource-plugin durchgeführt. Wenn Sie das entsprechende Dokument lesen, erfahren Sie, wie Sie Ressourcen von src/test/Java kopieren.
Unter http://maven.Apache.org/plugins/maven-resources-plugin/testResources-mojo.html finden Sie das Ziel für Testressourcen, das im Standardlebenszyklus enthalten ist.
Und dann sehen Sie http://maven.Apache.org/pom.html und suchen Sie nach <testResources>
.
bmargulies gab die Antwort , aber lassen Sie mich einige Details angeben.
<testresources>
kann wie folgt zum <build>
-Knoten des POM des Projekts hinzugefügt werden:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/Java</directory>
</testResource>
</testResources>
Das kopiert alles in src/test/Java
- einschließlich des .Java
-Quellcodes, den wir nicht wollen.
Es überschreibt (wie von bmargulies nur angedeutet) auch die Standardeinstellung <testResources>
im übergeordneten Standard-POM, von der alle anderen POM erben (sofern diese Vererbung nicht geändert wird). Die standardmäßigen übergeordneten Kopien src/test/resources
. Wenn Sie dies überschreiben, erhalten wir das nicht wie üblich kopiert, was wir nicht wollen. (Insbesondere ist mein ganzer Grund, dies zu tun, die Verwendung von unitils, die die unitils.properties
-Datei kopieren möchte - und das ist (für mich jedenfalls) in src/test/resources
).
Also fügen wir src/test/resources
wieder hinzu:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/Java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Die Kopien werden in der angegebenen Reihenfolge aufgeführt, sodass für Dateien, die sowohl in /src/test/Java
(und in Unterverzeichnissen) als auch in /src/test/resources
(und in Unterverzeichnissen) vorhanden sind, die src/test/resources
-Version diejenige ist, die in test-classes
endet.
Jetzt müssen wir nur noch not die .Java
-Dateien kopieren:
<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>
Die einzige Art und Weise, wie es für mich funktionierte, wenn ich meine Testkonfiguration in den src/test/resources
-Ordner (analog zu src/test/Java
für Quelldateien) stelle. Dateien aus diesem Ordner werden während der Ausführung des Tests in den Ordner target/test-classes
kopiert, der sich im Klassenpfad befindet. Ich weiß nicht warum, aber die nächste Konfiguration funktionierte nicht 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, Maven zu kopieren Ressourcen von Src/Test/Java?
Ja, dies wird mit dem Plugin antrun problemlos erreicht.