Dépendance de test Maven avec les classifier

Dans votre projet multi-module Maven, vous avez développé des tests unitaires qui nécessite les ressources de test d’un module frère. Typiquement le war qui nécessite le core jar.
Pour faire ça, il faut savoir que Maven est capable de générer plusieurs jar:

  • Jar des binaires
  • Jar des sources
  • Jar de la javadoc
  • jar des binaires de test

Il faut dans ce cas utiliser un classifier « tests » et utiliser la déclaration suivante pour rédéfinir le goal:

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

Dans votre module qui dépend de votre jar de test, vous devez ajouter la dépendance :

<dependency>
	<groupId>fr.w3blog</groupId>
	<artifactId>w3blog-core</artifactId>
	<version>1-SNAPSHOT</version>
	<scope>compile</scope>
</dependency>
<dependency>
	<groupId>fr.w3blog</groupId>
	<artifactId>w3blog-core</artifactId>
	<version>1-SNAPSHOT</version>
	<type>test-jar</type>
	<scope>test</scope>
</dependency>

Désormais, les test unitaires de votre nouveau module pourront utiliser les classe utilitaire de test du module core.

Lors de vos déploiements (Jenkins), ou de phase de compilation, vous serez peux-être amené à désactiver les tests Maven. à l’aide de l’instruction maven.test.skip ou -DskipTests.

Attention, vous devez utiliser -DskipTests, sinon vous aurez l’erreur suivante:

Could not find artifact fr.w3blog:w3blog-core:jar:tests

Contrairement à ce que l’on pourrait penser, ces 2 instructions ne sont pas équivalente: maven.test.skip saute également la compilation, alors -DskipTests compile quand même les classes de tests, même il ne les exécute.
Vous trouverez toute ces informations sur la page : Maven Skipping Tests