Présentation par Nicolas Lalevée des modèles de gestion de dépendances Maven, Ivy et OSGi au Toulouse Jug du 26 Mai 2011.
Abstract:
La gestion des dépendances, sac de noeuds presque par définition, on va essayer de démêler tout ça.
Après avoir fait un état des lieux avec Maven car il est l'incontournable du moment, nous irons voir comment Ivy peut décrire assez finement et gérer avec souplesse des dépendances. Nous verrons ensuite comment le modèle de dépendances d'OSGi est original et apporte encore de nouveaux concepts. Deux mondes s'affrontent alors, celui de Maven et Ivy face à celui d'OSGi; on tentera enfin d'esquisser un meilleur des deux mondes.
4. Le répertoire lib
• Répertoire rempli de machin.jar
• Téléchargement un à un
• Itération jusqu’à ce que cela compile/démarre
• Projet «multi modules», oui mais en fait non.
9. TESTS Maven : run
-------------------------------------------------------
-------------------------------------------------------
Running hudson.BulkChangeTest
[...]
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /home/me/jenkins/core/target/jenkins-core-1.397-
SNAPSHOT.jar
[INFO] [install:install {execution: default-install}]
[INFO] Installing /home/me/jenkins/core/target/jenkins-core-1.397-
SNAPSHOT.jar to /home/me/.m2/repository/org/jenkins-ci/main/
jenkins-core/1.397-SNAPSHOT/jenkins-core-1.397-SNAPSHOT.jar
[INFO]
---------------------------------------------------------------
---------
[INFO] BUILD SUCCESSFUL
[INFO]
---------------------------------------------------------------
---------
[INFO] Total time: 36 seconds
[INFO] Finished at: Sun Feb 06 18:30:34 CET 2011
[INFO] Final Memory: 62M/121M
[INFO]
---------------------------------------------------------------
10. Maven :
dépendances
<project>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>jenkins-core</artifactId>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
• version : «The default Maven meaning for 1.0 is
everything (,) but with 1.0 recommended»
• (,1.0],[1.2,) <=> x <= 1.0 or x >= 1.2
12. Maven : optional
<dependency>
<groupId>org.apache</groupId>
<artifactId>lucene</artifactId>
<version>3.1</version>
<optional>true</optional>
</dependency>
• peut éviter de télécharger the world
• peu utile à l’utilisateur
15. • première release en 2006 chez Jayasoft
• Entrée dans Apache en 2007
• 2.2 en Octobre 2010
16. Ivy : fonctionnalités
• Pas de build, juste de la gestion de dépendances
• Configurable à souhait
• Bonne documentation
• Peut être très verbeux dans les logs
• Bonne intégration à Ant (et Eclipse !)
• Compatibilité avec les repo Maven
25. D’autres ?
• .deb (debian et ubuntu)
• .rpm (redhat)
• ebuild (gentoo)
• ports (freebsd et macport)
26. D’autres ?
• .deb (debian et ubuntu)
• .rpm (redhat)
• ebuild (gentoo)
• ports (freebsd et macport)
Sans gestion de version ?
27. D’autres ?
• .deb (debian et ubuntu)
• .rpm (redhat)
• ebuild (gentoo)
• ports (freebsd et macport)
Sans gestion de version ?
• cibles make et targets Ant
28. D’autres ?
• .deb (debian et ubuntu)
• .rpm (redhat)
• ebuild (gentoo)
• ports (freebsd et macport)
Sans gestion de version ?
• cibles make et targets Ant
• «include» en C, XSLT, make, Ant
29. D’autres ?
• .deb (debian et ubuntu)
• .rpm (redhat)
• ebuild (gentoo)
• ports (freebsd et macport)
Sans gestion de version ?
• cibles make et targets Ant
• «include» en C, XSLT, make, Ant
• diagramme de gantt
30. D’autres ?
• .deb (debian et ubuntu)
• .rpm (redhat)
• ebuild (gentoo)
• ports (freebsd et macport)
Sans gestion de version ?
• cibles make et targets Ant
• «include» en C, XSLT, make, Ant
• diagramme de gantt
• java: import
42. Modèle OSGi
• identifiant : nom symbolique + version
• mono artefact (même pas de source, javadoc)
• dépendances d’usage externes
• pas de notion d’usage interne (test/runtime/compile)
• pas de notion de «provided»
43. OBR
• OSGi Bundle Repository (RFC 112 / RFP 122)
• Spécification d’une API Java opérant sur un
repository de bundles
• «SHALL NOT be required to produce identical sets
of resolved resources throughout every phase of the
development process.»
50. 2 vues
• Vue provider : déclare des dépendances d’un API
• Vue développeur : besoin d’une certaine
implémentation d’une API
51. 2 descripteurs ?
• descripteur des dépendances au niveau API
• descripteur des implémentations à réellement utiliser
52. Proposition
• ivy.xml lors du développement (usages internes)
• résolution de dépendances via un OBR
• bnd pour générer le MANIFEST.MF
• Publication sur un OBR, sans ivy.xml