2012-08-01 5 views
2

Je suis nouveau à Maven et j'ai un peu de mal à envelopper ma tête autour de cela.maven cross projet intégration

J'ai un tas de tests d'intégration regroupés sous forme de projet. J'aimerais pouvoir appliquer ces tests à tout autre projet à volonté.

Comment puis-je obtenir le code de projet de tests d'intégration dans un autre projet utilisant le POM et s'exécutant pendant la phase de test d'intégration?

Si je le considère comme une dépendance et que le POM du projet de test d'intégration spécifie un test d'intégration de phase. Le cycle de construction du projet d'origine continue-t-il jusqu'à ce qu'il atteigne les tests d'intégration, puis le projet de dépendance prend le relais à cette phase? Désolé, j'ai l'impression de battre un cheval mort ici. Vos réponses m'ont beaucoup aidé à comprendre ce qui se passait et ce que je devais faire. Ma question est même si mon code de test compile et est ajouté en tant que dépendance avec test comme la portée pour une raison quelconque, il n'exécute pas ou ne pas détecter le test. Le test s'appelle appTest et a la balise JUnit 4.x dessus et je n'arrive pas à comprendre pourquoi ça ne marche pas.

Répondre

1

La meilleure option serait d'extraire le code des tests d'intégration pour séparer le module et ensuite vous devrez exécuter mvn install pour publier les binaires dans le référentiel local pour être visible lors de la construction d'un autre projet ou juste mvn compile si ces tests seront utilisés dans le projet multi-module où les modules ont la même version que le module parent. Pour être utilisé dans un autre projet ou module, il doit être déclaré dans la section dépendance avec une portée de test comme la bibliothèque junit.

Si ci-dessus n'est pas l'option appropriée, vous pouvez essayer de préparer pot attaché avec classificateur de test (suffixe de nom de fichier):

<build> 
    <sourceDirectory>src/main/scala</sourceDirectory> 
    <testSourceDirectory>src/test/scala</testSourceDirectory> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>test-jar</id> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
         <configuration> 
          <includes> 
           <include>com/thenewmotion/test/**/*.*</include> 
          </includes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

et à utiliser, en plus de tester la portée du type pot de test ou des tests classificateur devrait être ajouté:

<dependency> 
    <groupId>com.thenewmotion</groupId> 
    <artifactId>msp-solveconnector</artifactId> 
    <version>${project.version}</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 
+0

qui est essentiellement ce que je demande. Comment puis-je faire cela et toujours exécuter les tests d'intégration sur d'autres projets? J'apprécie la réponse rapide – user1569503

+0

grand merci, je crois que je comprends maintenant. – user1569503

+0

J'ai essayé les trois façons que vous avez suggérées avec un code de démarrage très simple mais le test dans le module/projet de test ne fonctionnera pas sur l'autre projet. Chaque fois que sureFire dit qu'il n'y a pas de tests à exécuter et qu'il continue. Plus d'idée? Le seul autre que j'avais était de faire un plugin personnalisé que je voudrais éviter si possible. – user1569503

2

Vous pouvez publier vos tests dans un artefact isolé configuration maven-plugin-pot et en cours d'exécution mvn install:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-jar-plugin</artifactId> 
<executions> 
    <execution> 
    <goals> 
    <goal>test-jar</goal> 
    </goals> 
    </execution> 
</executions> 
</plugin> 

Et plus tard importer la dépendance des autres projets sur lesquels vous souhaitez exécuter les tests:

<dependency> 
<groupId>project.with.tests.groupid</groupId> 
<artifactId>projectwithtestsartifatid</artifactId> 
<version>1.0</version> 
<type>test-jar</type> 
<scope>test</scope> 
</dependency> 

Quoi qu'il en soit, plugins Surefire ou par défaut ne regarder que pour les tests dans dossier cible/test-classes, pas dans les pots de classpath. Il y a un à ce sujet dans le feu infaillible avec aucune version fixe assignée (au moins pour le moment).

Une solution serait d'utiliser le plugin de dépendances pour décompresser les classes de test dans cibles/test-classes, mais cela pourrait contaminer la sortie:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-dependency-plugin</artifactId> 
<executions> 
    <execution> 
    <id>resource-dependencies</id> 
    <phase>process-test-classes</phase> 
    <goals> 
    <goal>unpack-dependencies</goal> 
    </goals> 
    <configuration> 
    <includeTypes>test-jar</includeTypes> 
    <outputDirectory>${project.build.directory}/test-classes</outputDirectory> 
    </configuration> 
    </execution> 
</executions> 
</plugin>