Developpez.com

Une très vaste base de connaissances en informatique avec
plus de 100 FAQ et 10 000 réponses à vos questions

Intégration continue avec Continuum

de projets Maven 2
Continuum


précédentsommairesuivant

IV. CREATION DE PROJETS D'EXEMPLE SOUS ECLIPSE

IV-A. Différents projets d'exemple

Pour les besoins de cet article, il est nécessaire de créer des projets d'exemple correspondants aux cas qui peuvent se présenter lors de l'intégration continue.

  • NeCompilePas : projet qui ne compile pas.
  • SansTests : projet qui compile et qui n'a pas de tests.
  • TestsCompileKO : projet qui compile et qui a des tests qui ne compilent pas.
  • TestsKO : projet qui compile et qui a des tests qui compilent, mais ne passent pas.
  • TestsOK : projet qui compile et qui a des tests qui compilent et passent.

IV-A-1. Structure des projets d'exemple

Les différents projets d'exemple ont une structure similaire :

Image non disponible

Conformément à l'arborescence projet préconisée par Maven, les sources du projet sont dans "src/main/java". Les sources des tests du projet sont dans "src/test/java" et le pom.xml est à la racine du projet.

Chaque projet ne contiendra qu'une seule classe "ClasseDuProjet" dans le package "com.developpez.rpouiller.continuum" et si le projet comporte des tests, ceux-ci seront dans la classe "CasDeTestDuProjet" du même package.

IV-A-2. Contenu du fichier Maven pom.xml

Le fichier Maven "pom.xml" de chaque projet comporte un contenu comme ci-dessous. Les valeurs "[groupe]", "[projet]", "[Projet]" et "[projetSurSVN]" sont à remplacer par le groupe auquel appartient le projet, l'identifiant du projet, le nom du projet et le nom du projet sur Subversion.

pom.xml
CacherSélectionnez
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
			http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>[groupe]</groupId>
	<artifactId>[projet]</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>[Projet]</name>

	<scm>
		<connection>scm:svn:svn://localhost/[projetSurSVN]/trunk</connection>
	</scm>

	<ciManagement>
		<system>continuum</system>
		<url>http://localhost:8080/continuum</url>
		<notifiers>
			<notifier>
				<type>mail</type>
				<sendOnError>true</sendOnError>
				<sendOnFailure>true</sendOnFailure>
				<sendOnSuccess>true</sendOnSuccess>
				<sendOnWarning>true</sendOnWarning>
				<configuration>
					<address>tutoriel.continuum@gmail.com</address>
				</configuration>
			</notifier>
		</notifiers>
	</ciManagement>

	<developers>
		<developer>
			<id>regis.pouiller</id>
			<name>Régis POUILLER</name>
			<url>http://rpouiller.developpez.com</url>
			<roles>
				<role>Rédacteur du tutoriel</role>
			</roles>
			<timezone>1</timezone>
		</developer>
	</developers>

	<contributors>
		<contributor>
			<name>Continuum</name>
			<url>http://continuum.apache.org/</url>
			<roles>
				<role>Sujet de l'article</role>
			</roles>
			<timezone>0</timezone>
		</contributor>
	</contributors>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-site-plugin</artifactId>
				<configuration>
					<locales>fr</locales>
				</configuration>
				<executions>
					<execution>
						<phase>deploy</phase>
						<goals>
							<goal>site</goal>
							<goal>deploy</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>

				<configuration>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<includes>
						<include>**/*.java</include>
					</includes>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<reporting>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-report-plugin</artifactId>
			</plugin>
		</plugins>
	</reporting>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<distributionManagement>
		<site>
			<id>sites</id>
			<name>Site du projet</name>
			<url>dav://localhost/tutoriel/sites/${project.name}-${project.version}</url>
		</site>
		<repository>
			<id>releases</id>
			<name>Repository du projet</name>
			<url>dav://localhost/tutoriel/releases/</url>
		</repository>
	</distributionManagement>
</project>

La partie "scm" indique la connexion à Subversion. La documentation sur cette balise est disponible ici.

La partie "ciManagement" indique les notifications à envoyer selon les cas rencontrés lors de l'intégration continue. La documentation sur cette balise est disponible ici.

La partie "developers" contient la liste des personnes du projet, leurs rôles et leur adresse mail. La documentation sur cette balise est disponible ici.

La partie "contributors" contient la liste contributeurs au projet. La documentation sur cette balise est disponible ici.

La partie "build/plugins" contient le plugin "site" (documentation du plugin ici) qui est paramétré pour générer et déployer le site en français lorsque la phase "deploy" est déclenchée, le plugin "compiler" (documentation du plugin ici) qui est paramétré pour compiler en Java5 et le plugin "surefire" (documentation du plugin ici) qui est paramétré pour lancer toutes les classes de tests qu'il trouve (par défaut il s'agit des classes commençant par "Test" ou finissant par "Test" ou "TestCase", la documentation est disponible ici). La documentation sur cette balise est disponible ici.

La partie "reporting/plugins" contient le plugin "surefire-report" (documentation du plugin ici) qui crée, lors de la génération du site, le rapport lié aux tests par SureFire. La documentation sur cette balise est disponible ici.

La partie "dependencies" contient la liste des dépendances du projet (ici c'est juste la version 4.5 de JUnit). La documentation sur cette balise est disponible ici.

La partie "distributionManagement" indique où les sites et les releases sont déposés. La documentation sur cette balise est disponible ici.

IV-A-3. Génération des fichiers d'Eclipse (.classpath et .project) grâce au fichier Maven pom.xml

La commande "mvn eclipse:eclipse" exécutée dans le dossier d'un projet permet de mettre à jour le classpath du projet (elle génère des fichiers .project et .classpath) après téléchargement des dépendances si besoin. Il faut rafraîchir le projet dans la vue Eclipse pour recharger le classpath généré. Le classpath généré utilise la variable "M2_REPO" (voir les "Referenced Libraries" dans la structure des projets). Cette variable est à configurer dans les préférences d'Eclipse "Java/Build Path/Classpath Variables" avec le chemin du repository Maven ("dossierUtilisateur\.m2\repository").

Image non disponible

IV-A-4. Classe du projet

Chaque projet d'exemple comporte une seule classe (dans ce cas, une classe sans erreur de compilation), qui correspond au code ci-dessous (avec les différences nécessaires à l'exemple).

ClasseDuProjet.java
CacherSélectionnez
package com.developpez.rpouiller.continuum;

public class ClasseDuProjet {

	public int methode() {
		return 0;
	}
}

IV-A-5. Cas de tests du projet

Chaque projet d'exemple avec tests comporte une seule classe de tests (dans ce cas des tests qui compilent et qui passent), qui correspond au code ci-dessous (avec les différences nécessaires à l'exemple).

CasDeTestsDuProjet.java
CacherSélectionnez
package com.developpez.rpouiller.continuum;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CasDeTestsDuProjet {

	@Test
	public void controleMethode() {
		assertEquals(0, new ClasseDuProjet().methode());
	}
}

IV-A-6. Implémentation des projets

IV-A-6-a. Implémentation du projet "NeCompilePas"
pom.xml
CacherSélectionnez
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
		http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>sanstests</groupId>
	<artifactId>necompilepas</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>NeCompilePas</name>

	<scm>
		<connection>scm:svn:svn://localhost/NeCompilePas/trunk</connection>
	</scm>

	.........

</project>
ClasseDuProjet.java
CacherSélectionnez
package com.developpez.rpouiller.continuum;

public class ClasseDuProjet {

	public int methode() {
		// Erreur de compilation.
		// return 0;
	}
}
IV-A-6-b. Implémentation du projet "SansTests"
pom.xml
CacherSélectionnez
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
		http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>sanstests</groupId>
	<artifactId>sanstests</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>SansTests</name>

	<scm>
		<connection>scm:svn:svn://localhost/SansTests/trunk</connection>
	</scm>

	.........

</project>

Ce projet et les suivants comportent une "ClasseDuProjet" identique à celle présentée dans le IV-A-4. Classe du projet.

IV-A-6-c. Implémentation du projet "TestsCompileKO"
pom.xml
CacherSélectionnez
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
		http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>avectests</groupId>
	<artifactId>testscompileko</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>TestsCompileKO</name>

	<scm>
		<connection>scm:svn:svn://localhost/TestsCompileKO/trunk</connection>
	</scm>

	.........

</project>
CasDeTestsDuProjet.java
CacherSélectionnez
package com.developpez.rpouiller.continuum;

import org.junit.Test;

public class CasDeTestsDuProjet {

	@Test
	public void controleMethode() {
		// Erreur de compilation (pas d'import de "assertEquals")
		assertEquals(0, new ClasseDuProjet().methode());
	}
}
IV-A-6-d. Implémentation du projet "TestsKO"
pom.xml
CacherSélectionnez
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
		http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>avectests</groupId>
	<artifactId>testsko</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>TestsKO</name>

	<scm>
		<connection>scm:svn:svn://localhost/TestsKO/trunk</connection>
	</scm>

	.........

</project>
CasDeTestsDuProjet.java
CacherSélectionnez
package com.developpez.rpouiller.continuum;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class CasDeTestsDuProjet {

	@Test
	public void controleMethode() {
		// Erreur dans les tests : la méthode retourne 0
		assertEquals(1, new ClasseDuProjet().methode());
	}
}
IV-A-6-e. Implémentation du projet "TestsOK"
pom.xml
CacherSélectionnez
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
		http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>
	<groupId>avectests</groupId>
	<artifactId>testsok</artifactId>
	<packaging>jar</packaging>
	<version>1.0-SNAPSHOT</version>
	<name>TestsOK</name>

	<scm>
		<connection>scm:svn:svn://localhost/TestsOK/trunk</connection>
	</scm>

	.........

</project>

Ce projet comporte un "CasDeTestsDuProjet" identique à celui présenté dans le IV-A-5. Cas de tests du projet.

IV-A-6-f. Téléchargement des projets

Les fichiers zip téléchargeables ici contiennent uniquement les sources et le pom.xml de chaque projet. Ce sont les seuls éléments qui doivent être commités(1) sous SVN pour l'intégration continue.

Les fichiers ".project" et ".classpath" nécessaires à Eclipse peuvent être générés grâce à la commande "mvn eclipse:eclipse", comme indiqué en info dans le IV-A-3. Génération des fichiers d'Eclipse (.classpath et .project) grâce au pom.xml.

Projet Téléchargement
NeCompilePas ici (Miroir)
SansTests ici (Miroir)
TestsCompileKO ici (Miroir)
TestsKO ici (Miroir)
TestsOK ici (Miroir)

IV-B. Partage du projet sur Subversion

IV-B-1. Choix de l'emplacement du référentiel Subversion

Effectuer un clic droit sur le projet, puis choisir "Team"/"Share Project...".

Image non disponible

Choisir "SVN", puis cliquer sur "Next >".

Image non disponible

Saisir "svn://localhost/" dans "URL". Saisir le compte utilisateur SVN et le mot de passe qui ont été entrés dans le fichier "passwd" du dossier "C:\svn_repos\conf" dans "User" et "Password", puis cliquer sur "Next".

Image non disponible

Sélectionner "Advanced Mode" et "Use single project layout", puis cliquer sur "Finish".

Image non disponible

Cliquer sur "Cancel".

Image non disponible

IV-B-2. Commit du projet sur Subversion

Pour commiter des ressources sur Subversion, il faut les sélectionner (ici le dossier "src" et le fichier "pom.xml", juste après le partage) puis effectuer un clic droit et choisir "Team"/"Commit...".

Image non disponible

Saisir un commentaire, puis valider le commit en cliquant sur "OK".

Image non disponible

précédentsommairesuivant
commit : soumission au gestionnaire de versions (SVN)

  

Copyright © 2009 Régis POUILLER. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.