Maven (Surefire): ressources de test de copie de src / test / java
-
26-09-2019 - |
Question
plug-in Surefire (test) de Maven mvn test-compile
copie les fichiers dans src/test/resources
à target/test-classes
. Il compile .java
en src/test/java
et copie les fichiers compilés .class
à target/test-classes
.
Mais il ne copie pas les ressources de src/test/java
, et il est plus commode d'être en mesure de mettre des ressources de test dans le même répertoire que les classes de .java
ils sont des ressources pour que dans une hiérarchie parallèle dans src/test/resources
.
Est-il possible d'obtenir Maven pour copier les ressources de src/test/java
?
La solution
La copie des ressources est fait par le maven-plugin-ressources, et si vous lisez la doc de celui-ci, vous verrez comment ajouter la copie des ressources de src / test / java.
Voir http://maven.apache.org/plugins/maven-resources- plugin / testResources-mojo.html pour l'objectif test-ressources, qui est inclus dans le cycle de vie par défaut.
Et puis voir http://maven.apache.org/pom.html et recherchez <testResources>
.
Autres conseils
bmargulies a donné réponse, mais laissez-moi remplir quelques détails.
<testresources>
peut être ajouté au nœud <build>
du POM du projet, comme ceci:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
</testResources>
Que copie tout en src/test/java
- y compris le code source de .java
, que nous ne voulons pas.
Il a également (comme bmargulies seulement à se faire) et remplace le overrides paramètre par défaut <testResources>
dans le POM parent standard tous les autres POM héritent de (à moins que l'héritage est changé). Le parent copie norme src/test/resources
, donc en redéfinissant que, nous ne sommes pas calqués comme d'habitude, que nous ne voulons pas. (En particulier, ma raison tout pour ce faire est d'utiliser Unitils, qui veut que le fichier copié unitils.properties
-. Et qui est (pour moi, de toute façon) dans src/test/resources
Nous ajouter à nouveau src/test/resources
:
<testResources>
<testResource>
<directory>${project.basedir}/src/test/java</directory>
</testResource>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
Cette copie dans l'ordre indiqué, de sorte que les fichiers qui existent dans les deux /src/test/java
(et sous-répertoires) et dans /src/test/resources
(et sous-répertoires), la version src/test/resources
est celui qui finit dans test-classes
.
Maintenant, nous devons 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 cela a fonctionné pour moi quand je mets ma configuration de test dans le dossier de src/test/resources
(analogue de src/test/java
pour les fichiers source). Les fichiers de ce dossier est copié dans le dossier target/test-classes
qui est sur le chemin de classe lors de l'exécution des tests. Je ne sais pas pourquoi, mais la prochaine configuration 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 une copie de Maven ressources de src / test / java?
Oui, cela est facilement atteint avec le plug-in antrun .