Dépendance de test Maven dans un projet multi module

J'utilise maven pour construire un projet multi-modules. Mon module 2 dépend du module 1 src à la portée de la compilation et des tests du module 1 dans la portée du test.

Module 2 -

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>test</scope>
   </dependency>

Cela fonctionne bien. Disons que mon module 3 dépend de Module1 src et teste au moment de la compilation.

Module 3 -

   <dependency>
       <groupId>blah</groupId>
       <artifactId>MODULE1</artifactId>
       <version>blah</version>
       <classifier>tests</classifier>
       <scope>compile</scope>
   </dependency>

Quand j'exécute mvn clean install, MA construction s'exécute jusqu'au module 3, échoue au module 3 car elle n'a pas pu résoudre la dépendance de test du module 1. Ensuite, je fais un mvn install sur le module 3 seul, revenez en arrière et exécutez mvn install sur mon pom parent pour faire construire. Comment puis-je résoudre ce problème?

72
demandé sur ROMANIA_engineer 2009-11-13 00:17:06

3 réponses

J'ai un doute sur ce que vous essayez de faire mais je suppose que vous voulez réutiliser les tests que vous avez créés pour un projet (module1) dans un autre. Comme expliqué dans la note au bas du Guide d'utilisation des tests joints :

Notez que les éditions précédentes de ce guide a suggéré d'utiliser <classifier>tests</classifier> au lieu de <type>test-jar</type>. Bien que cela fonctionne actuellement dans certains cas, il ne fonctionne pas correctement pendant une construction de réacteur du module JAR de test et de tout consommateur si un cycle de vie phase avant l'installation est appelée. Dans un tel scénario, Maven ne résoudra pas le pot de test à partir de la sortie de la construction du réacteur, mais à partir du référentiel local/distant. Apparemment, le JAR des dépôts pourrait être obsolète ou complètement manquant, provoquant un échec de construction (cf. MNG-2045).

Donc, tout d'abord, pour empaqueter les tests compilés dans un JAR et les déployer pour une réutilisation générale, configurez maven-jar-plugin comme suit:

<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>
     </plugin>
    </plugins>
  </build>
</project>

Ensuite, installez / déployez l'artefact JAR test comme d'habitude (en utilisant mvn install ou mvn deploy).

Enfin, pour utiliser le pot de test, vous devez spécifier une dépendance avec un type spécifié de test-jar:

<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>
107
répondu Pascal Thivent 2009-11-14 09:02:24

En ce qui concerne mon commentaire à la question Pascals, je pense avoir trouvé une réponse convenable:

<plugins>
    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.2</version>
        <executions>
            <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
            <phase>test-compile</phase>
        </execution>
        </executions>
        <configuration>
            <outputDirectory>${basedir}\target</outputDirectory>
        </configuration>
    </plugin>
</plugins>

La principale différence ici, comme vous le voyez ici est le <phase> balise.

Je vais créer le test-jar et il sera disponible dans la phase de compilation des tests et pas seulement après la phase de paquet.

Fonctionne pour moi.

15
répondu Roman 2017-03-22 18:47:18

Comme https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html dit:

Comment créer un pot contenant des classes de test Lorsque vous souhaitez créer un jar contenant des classes de test, vous voudrez probablement réutiliser ces classes. Il y a deux façons de résoudre ce problème:

  1. The easy way créez un jar attaché avec les classes de test du projet en cours et perdez ses dépendances transitives à portée de test.

  2. The preferred way Créer un projet séparé avec les classes de test.

Veuillez lire cet article pour plus de détails.

0
répondu Goofy 2018-09-30 07:26:59