web-dev-qa-db-fra.com

Maven (Surefire): copie les ressources de test de src/test/java

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?

32
tpdi

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>.

19
bmargulies

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>
36
assylias

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>
2
Alex Barysevich

Est-il possible d'obtenir Maven pour copier ressources de src/test/java?

Oui, ceci est facilement réalisé avec le plugin antrun .

0
javamonkey79