2010-02-11 6 views
39

Il existe une solution claire pour partager le code de test commun entre les projets maven en utilisant l'objectif test-jar du plugin maven-jar-plugin (voir here).Partager les ressources de test entre les projets maven

Je dois faire la même chose avec les ressources de test, en particulier, je veux que les ressources de test du projet A soient disponibles dans le chemin de classe du projet B pendant le test.

Pour le projet A un besoin de déclarer:

<!-- Package and attach test resources to the list of artifacts: --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <tasks> 
        <jar destfile="${project.build.directory}/test-resources.jar"> 
         <fileset dir="${project.basedir}/test-resources" /> 
        </jar> 
       </tasks> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>${project.build.directory}/test-resources.jar</file> 
         <type>jar</type> 
         <classifier>test-resources</classifier> 
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Et dans le projet B, il sera la dépendance normale:

<dependency> 
    <groupId>myproject.groupId</groupId> 
    <artifactId>myartifact</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <classifier>test-resources</classifier> 
    <scope>test</scope> 
</dependency> 

Question: Faut-il travailler dans tous les cas? Est-il possible d'emballer des ressources sans maven-antrun-plugin (en utilisant plus de plugin 'léger')?

+0

semble qu'il y ait un besoin d'améliorer le plugin de ressources à distance pour les ressources de test - http://maven.apache.org/plugins/maven-remote-resources-plugin/index.html – cetnar

+0

@centar: merci pour les informations intéressantes sur le plugin, bien que, ce que vous avez dit est un peu offtopic :) –

Répondre

33

Utilisez simplement jar:test-jar et déclarez le JAR résultant en tant que dépendance (référez-vous à this guide pour plus de détails). Et alors que je ne comprends pas le problème d'avoir des ressources et cours dans ce pot, vous pouvez toujours exclure tous les fichiers .class:

<project> 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>test-jar</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <excludes> 
      <exclude>**/*.class</exclude> 
     </excludes> 
     </configuration> 
    </plugin> 
    </plugins> 
    </build> 
</project> 

Et pour l'utiliser:

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>com.myco.app</groupId> 
     <artifactId>foo</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    ... 
</project> 
+0

La phase d'exécution ne doit-elle pas être définie sur package? – sal

+1

@sal C'est parce que 'jar: test-jar' *" se lie par défaut à la phase du cycle de vie: 'package'." * –

+0

@Pascal: Merci pour l'indice. Je suis d'accord, il est logique de regrouper les ressources avec les classes. +1 pour votre réponse, cependant, les questions d'origine n'ont pas été répondues (comment emballer les ressources de test séparément de la manière la plus optimale?). –

0

Il existe déjà un objectif pour construire un test jar de maven. En supposant que vous ayez besoin de quelque chose d'un peu plus flexible, vous pouvez utiliser le plugin jar pour conditionner vos ressources de test et exécuter cet objectif avec l'objectif principal du paquet avec quelque chose comme ça.

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <configuration> 
       <classifier>test-resources</classifier> 
       <includes> 
       <include>**/*.whatever-you-want</include> 
       </includes> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

Tout ce que vous voulez emmitouflé serait ajouté au projet-name-version-test-resources.jar lorsque l'objectif du pot est exécuté.

Vous pouvez ensuite l'inclure dans un projet via la même dépendance que celle utilisée ci-dessus.

+0

L'exécution de l'objectif 'jar' lie automatiquement' maven-jar-plugin' aux "classes d irectory ", pas" tester le répertoire des classes ". Donc, ci-dessus va empaqueter des classes simplement normales, et 'include 'n'aidera pas toutes les ressources de test à l'artefact. Désolé, mais "-1". –

Questions connexes