| Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide Consultez : | ![]() |
Une des raisons pour lesquelles nous utilisons Maven est qu'il facilite le suivi des dépendances (et des
dépendances de dépendances). Quand un projet dépend d'un artefact produit par un autre projet alors cet artefact est
une dépendance. Dans le cas d'un projet Java, cela peut être aussi simple que de dépendre d'une dépendance externe
comme Log4J ou JUnit. Les dépendances peuvent donc représenter des dépendances externes, mais elles permettent aussi
de gérer les dépendances entre projets. Si le projet-a dépend du projet-b,
Maven est suffisamment intelligent pour savoir que le projet-b doit être construit avant le
projet-a.
Les relations d'un projet ne se limitent pas aux dépendances et à déterminer tout ce qui est lui nécessaire pour construire un artefact. Maven sait modéliser les relations d'un projet vers son parent et entre sous-modules. Cette section présente les différentes relations qui peuvent exister entre projets et comment les configurer.
Les coordonnées permettent de définir de manière unique un projet, nous en avons déjà parlé dans le Chapitre 3, Mon premier projet avec Maven. Les relations entre projets se font au moyen des coordonnées Maven. Il ne suffit pas de dire que le projet-a dépend du projet-b ; en réalité, un projet avec un groupId, un artifactId et une version dépend d'un autre projet avec son groupId, son artifactId et sa version. Pour résumer, les coordonnées Maven se composent de trois éléments :
Un groupId regroupe un ensemble d'artefacts. Ces identifiants de groupe ont, en
général, la forme d'un package Java. Par exemple, le groupId
org.apache.maven est le groupId de base de l'ensemble des artefacts
produits par le projet Apache Maven. Les identifiants de groupe sont convertis en chemin dans les dépôts
Maven ; par exemple le groupId org.apache.maven correspondra au répertoire
/maven2/org/apache/maven sur repo1.maven.org.
L'artifactId est l'identifiant principal du projet. Quand vous produisez un
artefact, il va prendre le nom de l'artifactId. Quand vous faites référence à un projet
vous utiliserez l'artifactId. La combinaison artifactId,
groupId doit être unique. En d'autres termes, vous ne pouvez pas avoir deux projets
distincts avec les mêmes artifactId et groupId ; les
artifactIds sont uniques pour un groupId donné.
Si l'utilisation des '.' est très courante pour les groupIds, vous devriez
éviter d'en utiliser pour les artifactIds. En effet, cela peut provoquer des problèmes
lors de l'interprétation d'un nom complet jusqu'aux sous-composants.
Quand un artefact est délivré, on lui affecte un numéro de version. Ce numéro de version peut être un identifiant numérique tel que "1.0", "1.1.1" ou "1.1.2-alpha-01". Vous pouvez aussi utiliser ce que l'on appelle une version snapshot. Une version snapshot est une version d'un composant en cours de développement. Les numéros de version snapshot se terminent toujours par SNAPSHOT ; par exemple "1.0-SNAPSHOT", "1.1.1-SNAPSHOT" ou "1-SNAPSHOT". La Section 9.3.1.1, « Numéro de version de build » décrit les numéros de versions et les intervalles de versions.
Il existe un quatrième identifiant moins utilisé :
On utilise un classifier lorsqu'on livre le même code, mais sous la forme de plusieurs artefacts distincts pour des raisons techniques. Par exemple, si vous voulez construire deux arterfacts d'un JAR, un compilé avec le compilateur Java 1.4 et un autre avec le compilateur Java 6, vous utiliserez le classifier pour produire deux JARs différents avec la même combinaison groupId:artifactId:version. Si votre projet utilise des extensions en code natif, vous utiliserez le classifier pour distinguer les artefacts selon chaque plate-forme cible. Les classifiers sont couramment utilisés lors du packaging du code source, de la JavaDoc d'un artefact ou d'assemblage de binaires.
Dans ce livre, lorsque nous évoquons des dépendances, nous utilisons souvent le format simplifié suivant pour
décrire une dépendance : groupId:artifactId:version.
Pour référencer la version 2.5 de Spring, nous utiliserions
org.springframework:spring:2.5. Quand
vous demandez à Maven d'afficher une liste des dépendances grâce au plugin Maven Dependency, vous verrez que Maven
a tendance à produire des traces en utilisant cette écriture simplifiée.