Maven's Surefire (test) pluginmvn test-compile
copie les fichiers de src/test/resources
dans target/test-classes
. Il compile .Java
dans src/test/Java
et copie les fichiers .class
compilés dans target/test-classes
.
Mais il ne copie pas les ressources à partir de src/test/Java
et il est plus pratique de pouvoir placer les ressources de test dans le même répertoire que les classes .Java
pour lesquelles elles sont des ressources, plutôt que dans une hiérarchie parallèle dans src/test/resources
.
Est-il possible de demander à Maven de copier des ressources à partir de src/test/Java
?
La copie des ressources est entièrement effectuée par le plug-in maven-resource-plugin. Si vous lisez sa documentation, vous verrez comment ajouter une copie des ressources à partir de src/test/Java.
Voir http://maven.Apache.org/plugins/maven-resources-plugin/testResources-mojo.html pour l'objectif de ressources de test, inclus dans le cycle de vie par défaut.
Ensuite, consultez http://maven.Apache.org/pom.html et recherchez <testResources>
.
bmargulies a donné la réponse , mais laissez-moi vous donner quelques détails.
<testresources>
peut être ajouté au noeud <build>
du POM du projet, comme ceci:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/Java</directory>
</testResource>
</testResources>
Cela copie tout dans src/test/Java
- y compris le code source .Java
, ce que nous ne voulons pas.
Il substitue également (comme bmargulies l’a laissé entendre) et remplace le paramètre <testResources>
par défaut dans le POM parent standard dont tous les autres POM héritent (à moins que cet héritage ne soit modifié). Le parent standard copie src/test/resources
, donc en le surchargeant, nous ne le copions pas comme d'habitude, ce que nous ne voulons pas. (En particulier, ma raison est d’utiliser unitils, qui veut que le fichier unitils.properties
soit copié - et c’est (pour moi, en tout cas) dans src/test/resources
.
Nous rajoutons donc src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/Java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Cela copie dans l'ordre indiqué, de sorte que pour les fichiers existant à la fois dans /src/test/Java
(et dans les sous-répertoires) et dans /src/test/resources
(et dans les sous-répertoires), la version de src/test/resources
est celle qui se termine dans test-classes
.
Maintenant, il ne reste plus qu'à pas copier les fichiers .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>
La seule façon dont cela a fonctionné pour moi lorsque j'ai placé ma configuration de test dans le dossier src/test/resources
(analogue de src/test/Java
pour les fichiers source). Les fichiers de ce dossier sont copiés dans le dossier target/test-classes
qui se trouve sur le chemin d'accès aux classes pendant l'exécution des tests. Je ne sais pas pourquoi, mais la prochaine config n'a pas fonctionné pour moi:
<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>
Est-il possible d'obtenir Maven pour copier ressources de src/test/java?
Oui, ceci est facilement réalisé avec le plugin antrun .