2010-11-19 4 views
32

Maven's todsichere (Test-) Plugin kopiert Dateien in src/test/resources nach target/test-classes. Er kompiliert .java in src/test/java und kopiert die kompilierten .class-Dateien nach target/test-classes.Maven (todsichere): Testressourcen von src/test/java kopieren

Es werden jedoch keine Ressourcen von src/test/java kopiert, und es ist bequemer, Testressourcen in demselben Verzeichnis wie die .java-Klassen zu platzieren, für die sie Ressourcen sind, als in einer parallelen Hierarchie in src/Test/Ressourcen.

Ist es möglich, Maven Ressourcen von src/test/java zu kopieren?

+3

Sie können Maven dazu konfigurieren, aber es ist im Allgemeinen "bequemer", den Konventionen zu folgen und die Ressourcendateien zu setzen wo Maven denkt, dass sie sein sollten. – Thilo

+0

Die Unilars-Konvention besteht jedoch darin, die dbunit-XML-Dateien in dasselbe Verzeichnis wie den Test zu stellen, der sie verwendet. Und ehrlich gesagt, das wird für mein Team leichter. Der springende Punkt dabei ist, die Schmerzen beim Schreiben von dbunit-Tests zu reduzieren, was untrennbar mit dem Unitics zusammenhängt. – tpdi

Antwort

18

Das Kopieren der Ressourcen erfolgt über das maven-resource-plugin, und wenn Sie das entsprechende Dokument lesen, sehen Sie, wie das Kopieren von Ressourcen aus src/test/java hinzugefügt wird.

Siehe http://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html für das Ziel für Testzwecke, das im Standardlebenszyklus enthalten ist.

Und dann sehen Sie http://maven.apache.org/pom.html, und suchen Sie nach <testResources>.

+0

Danke. Aber ich bin immer noch ein bisschen unklar. Ich sehe, dass ich ein Tag in einschließen kann, aber um * test * Ressourcen zu kopieren, muss ich etwas zu den Plugins hinzufügen? – tpdi

+0

@tpdi siehe bearbeiten. – bmargulies

0

Ist es möglich, Maven zu kopieren Ressourcen von src/test/java?

Ja, das ist leicht mit der antrun plugin erreicht.

+0

Ich würde das 'einfach' im Vergleich zum Hinzufügen zu den testResources nennen. – bmargulies

28

bmargulies Bauen mit gab die Antwort, aber lassen Sie mich in einigen Details füllen.

<testresources> kann den <build> Knoten des Maven POM, wie dies hinzugefügt werden:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    </testResource> 
</testResources> 

Das alles Kopie in src/test/java - einschließlich dem .java-Quellcode, die wir nicht tun wollen.

Sie überschreibt auch (wie bmargulies nur angedeutet hat) die Standardeinstellung <testResources> im Standard-Parent-POM, von der alle anderen POM erben (sofern diese Vererbung nicht geändert wird). Das Standard-Elternteil kopiert src/test/resources, indem wir das überschreiben, bekommen wir das nicht wie üblich kopiert, was wir nicht wollen. (Mein Hauptgrund dafür ist die Verwendung von untils, die die unitis.properties-Datei kopieren wollen - und das ist (für mich sowieso) in src/test/resources.

Also fügen wir src erneut hinzu/test/resources:

<testResources> 
    <testResource> 
    <directory>${project.basedir}/src/test/java</directory> 
    </testResource> 
    <testResource> 
    <directory>${project.basedir}/src/test/resources</directory> 
    </testResource> 
</testResources> 

die Kopien in der Reihenfolge aufgeführt, so dass für Dateien, die in sowohl/src/test/java (und Unterverzeichnisse) und in/src/test/Ressourcen (und Unterverzeichnisse) vorhanden ist, Die Version src/test/resources ist diejenige, die in Testklassen endet.

Jetzt müssen wir nur nicht kopieren Sie die .java-Dateien:

1

Die einzige Möglichkeit für mich, als ich meine Testkonfiguration in den Ordner src/test/resources legte (analog zu src/test/java für Quelldateien). Dateien aus diesem Ordner werden während der Testausführung in den Ordner target/test-classes kopiert, der sich auf dem 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>