Utilisation "basique" de Maven et de Hudson
Des liens:
- http://maven.apache.org/guides/getting-started/index.html
- http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
- http://maven.apache.org/plugins/
- http://java.developpez.com/faq/maven/
Installer Maven
URL: http://maven.apache.org/download.html
- Prendre la dernière version soit: version 2.2.1
- Dézipper la version dans C:\devel\maven\maven-2.2.1
- Suivre les instructions de la page http://maven.apache.org/download.html
- Ne pas oublier d'ajouter le répertoire C:\devel\maven\maven-2.2.1/bin dans le le path.
Dans le répertoire %HOME%\.m2 (soit C:\Documents and Settings\<votreLogin>\.m2 sous Windows) ajouter le fichier settings.xml. Il doit contenir:
<settings> <localRepository>C:\devel\maven-repository</localRepository> <mirrors> <mirror> <id>artifactory</id> <mirrorOf>*</mirrorOf> <url>http://www.fudaa.fr:80/artifactory/repo</url> <name>Artifactory</name> </mirror> </mirrors> </settings>
Tester maven en lançant la commande mvn --version
.
Compiler un projet Fudaa avec Maven
Télécharger un projet de Fudaa: il faut faire un checkout avec subversion à partir de l'adresse: https://fudaa.svn.sourceforge.net/svnroot/fudaa. Par exemple, pour le modeleur il faut checkouter à partir de: https://fudaa.svn.sourceforge.net/svnroot/fudaa/trunk/soft/fudaa-modeleur/
Tester si le projet compile bien, il faut se placer dans le répertoire contenant le pom et lancer la commande: mvn compile
la commande install permet de compiler le projet, lancer les tests unitaires et générer les jar sur le PC du développeur. Si une personne veut mettre à disposition des jars, il doit lancer la commande "deploy". Cette commande peut être lancée fréquemment avec des versions SNAPSHOT. Elle compile le projet, lance les tests unitaires et upload les livrables sur le repository de fudaa.
Pour faire une release, cela demande 2 étapes : attention opération importante qui tague les sources et déploie les livrables. Voir la partie Faire une release.
Maven et les environnements de développement
Maven et eclipse
Voir le document d'installer d'un projet pour Eclipse.
Pour créer les fichiers pour eclipse ( .classpath, .project), il faut se placer dans le répertoire contenant le pom et lancer la commande: mvn eclipse:eclipse
Il est possible d'utiliser un plugin:
- http://maven.apache.org/eclipse-plugin.html (Tester partiellement.)
Maven et Netbeans
Netbeans gère nativement les projets maven et aucune manipulation n'est requise. Pour gérer un projet maven, il vous suffit d'utiliser le menu File->Open project et de sélectionner le répertoire contenant le fichier .pom du projet.
Le repository maven de fudaa
Il s'agit du serveur contenant toutes les librairies générées par fudaa:
C'est sur ce serveur que toutes les dépendances sont téléchargées. Des infos sur l'outil utilisé: http://www.jfrog.org/community.php
Utiliser une nouvelle librairie: ou chercher ?
Présentation rapide de Maven et des pom
pom est un fichier qui décrit un projet: ces dépendances, les plugins à utiliser pour construire le livrable, le site web.... Voir la doc de Maven pour plus de détail. Les fichiers pom supportent l'héritage ce qui permet de limiter les redites.
Architecture générale de Fudaa pour les pom
Les poms des projets fudaa héritent tous d'un pom parent http://fudaa.svn.sourceforge.net/viewvc/fudaa/trunk/pom/super-pom/pom.xml. Ce pom définit les versions des dépendances extérieures et des modules. Ce pom unique permet de s'assurer de la cohérence des versions.
Le framework
Les projets de la partie framework dépendent tous du pom du framework http://fudaa.svn.sourceforge.net/viewvc/fudaa/trunk/framework/pom.xml.
Ils sont déclarés comme modules de ce pom. Cela permet d'unifier le cycle de vie de tous les projets de la partie framework. Ainsi, si on lance la commande mvn clean install
dans le dossier framework, tous les projets seront nettoyés et construits.
Une release se fera également pour la totalité des modules du framework. Si une modification importante a lieu sur un des modules, on veillera à faire une release du framework entier.
La version en cours est 1.2-SNAPSHOT
Les projets business
Les projets de la partie business héritent du pom http://fudaa.svn.sourceforge.net/viewvc/fudaa/trunk/pom/business-pom/pom.xml. Contrairement au framework, les projets sont en principe indépendants les uns des autres.
En réalité, 2 ensembles existent implicitement :
- Un ensemble lié à corba (
dodico-corba, fudaa-common-corba
) - Un ensemble lié à la représentation de géométries 2D (
fudaa-ef, dodico-h2d, fudaa-sig
)
Ces ensembles sont dépendants du framework. Lors d'une release, on veillera à garder ces 2 ensembles cohérents, même si la version d'un ensemble diffère de l'autre.
La version en cours est 1.0
pour l'ensemble Corba, 1.2-SNAPSHOT
pour l'ensemble géométrie 2D.
Les projets applicatifs
Les projets de la partie soft héritent du pom http://fudaa.svn.sourceforge.net/viewvc/fudaa/trunk/pom/soft-pom/pom.xml.
Ces projets applicatifs sont ou non dépendants du framework, ils sont ou non dépendants des projets business.
Chaque projet peut avoir sa propre vie indépendamment des autres. Autrement dit, chaque projet peut être releasé indépendamment des autres.
Faire une release
Cette opération est importante: elle permet de taguer les sources ( faire une branche), générer les livrables et les placer dans le repository distant, générer le site internet du projet, et finalement elle incrémente la version du projet. Par exemple: le projet fudaa-ef est dans la version 1.0-SNAPSHOT. Les commandes maven sont:
1- Preparer les sources ( soit mvn release:prepare
):
- incrémenter en version 1.0
- Taguer les sources de 1.0
- Passer en version 1.1-SNAPSHOT
Pour cette partie, le développeur peut choisir les versions ( sauf s'il lance l'opération en mode batch, voir ci-dessous).
2- Faire la release ( mvn release:perform
):
- Télécharger les sources taguées en 1.0
- Construire les livrables à a partir de ces sources
- Déposer les livrables sur le repository de fudaa
- Générer le site internet
Pour éviter les casses-têtes avec la génération du site, la commande suivante peut être utilisée:
mvn release:perform -Dgoals=deploy
Les commandes maven
Pour préparer une release sans modifier l'existant (pour voir ce que cela donne): mvn release:prepare -DdryRun=true
pour netoyer et lancer la release mvn release:clean release:prepare
Lors de cette opération, une série de question sera posée au développeur.
Les fichiers créés par cette dernière opération
- pom.xml.tag sera la version envoyée sur le serveur
- pom.xml.next le prochain pom utilise après la release
- pom.xml.releaseBackup: le pom avant la commande
Pour lancer une release en batch mode (sans question) mvn --batch-mode release:prepare
Même chose que commande précédente sauf qu'aucune question n'est posée.
finalement pour déployer la version:
mvn release:perform
Documentation sur le web:
http://weblogs.java.net/blog/johnsmart/archive/2008/08/using_the_maven.html
Maven et svn
pour faire une release complète, il faut un client svn sur son poste.
Pour linux, il ne devrait pas y avoir de problème.
Pour Windows:
Toirtoise ne fournit pas l'exe svn.exe requis par maven: Possibilités:
- télécharger le client svn de subversion. Problème: il faut s'inscrire et la dernière version ne semble pas fonctionne ( erreur du style " Le fichier ... est déjà présent sur le serveur"
- solution pure java: ( cf super-pom/pom.xml). Ce serait la solution à envisager car il n'est pas nécessaire de télécharger un outil annexe et tout se fait via Maven. Ne fonctionne pas avec la dernière version
- utiliser le client svn SlikSVN : fonctionne très bien SlikSVN: http://www.sliksvn.com/en/download/
Hudson et Maven
Hudson est un moteur d'intégration continue. Il permet de lancer les cibles maven de manière périodique.
Normalement toutes les releases, deploy pourraient se faire depuis le moteur d'intégration continue ( il reste des points à régler). Cela permettrait d'éviter les fautes de frappes lors des commandes fatidiques.
Utilisation de Hudson
Hudson permet de lancer périodiquement des compilations sur un projet donné. Par exemple, pour fudaa-ef, le projet est compilé et testé a chaque modification dans SVN:
Comment sont nommées les builds dans Hudson (à compléter):
Les suffixes Light indiquent qu'il s'agit de build lancés périodiquement qui se content de complier le projet et de lancer les tests unitaires. Les suffixes Deploy indiquent une comande deploy: ces builds sont lancés sur demande du développeur. Ne fonctionnent pas pour l'instant car il faut modifier les droits. Les suffixes Release ( non fait) permettrait de faire des releases : à faire.