Introduction à Apache Maven et Apache Archiva par Jean-Sébastien FRANCK
Fonctionnement général
Différents points sont traités dans cette partie :
- Les fonctionnalités générales de Maven
- Les fichiers de configuration : pom.xml et settings.xml
- Les templates de projet : les archetypes
- Les plugins Maven
- Les repositories et la gestion des dépendances
Les fonctionnalités
Voici les différentes fonctionnalités de Maven :
- Génération du build/artifact : avec Maven, il est possible de générer le fichier résultant d'un projet Java (.jar, .war ou .ear)
- Gestion des dépendances et des dépendances transitives : possibilité de gérer les librairies d'un projet Java ainsi que les librairies nécessaires au fonctionnement des librairies souhaitées
- Intégration continue : exécution automatique des tests unitaires et intégration possible à différents serveurs d'intégration continue
- Fonctionnalités de nombreux plugins existants : possibilité par exemple de générer un site web d'informations sur le projet (plugin site), possibilité de déployer automatiquement un artifact sur un serveur d'application (plugin cargo), etc.
Configuration d'un projet Maven : settings.xml et pom.xml
Deux fichiers principaux permettent la configuration de Maven et des projets :
- settings.xml : permet de configurer Maven au niveau d'un poste client. C'est notamment dans ce fichier que sont précisés les accès aux repositories sur lesquels Maven doit télécharger les librairies. Un exemple de ce fichier est fournit dans la partie "Cas pratiques".
- pom.xml : permet de configurer Maven au niveau d'un projet. C'est dans ce fichier que sont précisées les différentes dépendances du projet. Hérite de la configuration de settings.xml et permet de redéfinir ces entrées pour une configuration spécifique au projet.
Les archetypes
A la création d'un projet Maven, le fait de spécifier un archetype permet de définir comment sera organisé l'arborescence du projet. Un archetype est donc un template de projet.
Il existe différents archetypes, chacun correspondant à un type de projet particulier. Il existe par exemple des archetypes pour les projets J2EE, les projets JPA, les projets JSF, les projets Struts etc.
L'arborescence suivante est l'arborescence créée lors de l'utilisation d'un archetype pour les simples projets Java :
- src/main/java : sources java du projet
- src/main/resources : ressources pour les sources java (images, fichiers de configuration etc)
- src/test/java : sources des tests unitaires
- src/test/resources : ressources pour les sources des tests
- pom.xml : fichier de configuration Maven du projet
Le cycle de vie d'un projet Maven
Le cycle de vie de Maven est composée de plusieurs tâches. Le développeur peut exécuter une tâche pour effectuer un traitement donné sur le projet. Voici les principales tâches du cycle de vie de Maven :
- compile: Compile le code source du projet
- test-compile: Compile les tests unitaires du projet
- test: Exécute les tests unitaires
- package: Créé l'artifact du projet (.jar, .war ou .ear)
- integration-test: Effectue les tests d'intégration
- install: Installe l'artifact dans le repository local de la machine
- deploy: Déploie l'artifact dans un repository distant
L'ordre de la liste de ces tâches n'est pas anodin. En effet, l'exécution de chacune des tâches listées ci-dessus est précédée par l'exécution des tâches précédant la tâche à exécuter. Ainsi, lorsque le développeur exécute la tâche package, les tâches compile, test-compile, et test sont exécutées au préalable.
Les plugins
Les fonctionnalités de base de Maven sont enrichies par de nombreux plugins existants. On peut notamment les cites les plugins suivants :
- Cargo : déploiement automatique de l'artifact sur un serveur d'application
- Site : génération d'un site d'information sur le projet
- Javadoc : génération de la javadoc du projet
A noter que chaque plugin offre de une à plusieurs tâches/goals à exécuter. Par exemple, le plugin cargo propose entre autres les tâches deploy et undeploy permettant respectivement de déployer ou de supprimer un artifact d'un serveur d'application. Pour plus d'informations, veuillez consulter la partie "Utilisation et écriture d'un plugin Maven" du chapitre "Cas pratiques".
La gestion des dépendances
Par défaut, Maven télécharge les librairies/dépendances sur les repositories officiels Maven (par exemple http://repo1.maven.org/maven2. Les dépendances à télécharger sont précisées dans le fichier pom.xml du projet. Les dépendances téléchargées sont stockées dans le répertoire ~/.m2/repository du poste client :
Configuration d'une dépendance
Voici un exemple de configuration de dépendance dans le fichier pom.xml :
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Avec cette configuration, Maven va télécharger la version 3.8.1 de la librairie junit:junit. Chaque librairie est distinctible grâce aux trois champs groupId, artifactId et version. Le champ groupId représente le nom du groupe de la librairie et le champ artifactId représente le nom de la librairie.
Par défaut, la librairie est téléchargée en http sur les repositories officiels. Les champs groupId, artifactId et version permettent à Maven de trouver la librairie sur les repositories officiels. Par exemple, dans l'exemple de la librairie junit : http://repo1.maven.org/maven2/junit/junit/3.8.1/.
javacio.us
Il n'est pas toujours évident de trouver la librairie que l'on cherche sur un repository existant. Le plugin google javacio.us permet à partir du nom d'une classe Java de retrouver le repository, le groupId et l'artifactId d'une librairie.
Portée des dépendances
Le champ scope permet, quant-à lui, de spécifier à quelle échelle la librairie doit être utilisée. Il existe différentes valeurs pour ce champ :
- compile (par défaut) : librairies utilisées pour la compilation
- test : librairies utilisées uniquement en phase de test
- provided : librairies fournies par un container ou par le JDK
- runtime : librairies uniquement nécessaires en runtime
- system : librairies contenues dans d'autres librairies
- import : permet d'intégrer les dépendances d'un autre fichier pom.xml
Apache Archiva >> |