de maven à sbt scalaio 2013
TRANSCRIPT
De Maven à SBTStéphane Manciot
Memo
• Introduction
• De Maven à SBT
o Architecture en plugin Maven versus tâches SBT
o Maven phases versus tasks dependencies
o Avantages SBT versus Maven
• SBT en entreprise
Un bon outil de build doit …
• S’inscrire dans une démarche DevOps
• Être indépendant de l’environnement sur lequel il s’exécute
• S’intégrer dans l’éco-système de l’entreprise
Mais aussi…
… Faciliter la vie des développeurs ;)
Architecture en plugin Maven versus tâches SBT
Architecture de Maven
• Une architecture reposant essentiellement sur :
o L’exécution de goals définis au sein de plugins
o Le rattachement de ces goals à des phases de l’un des 3 cycles de vie prédéfinis de Maven
o L’utilisation d’un fichier au format xml (Project Object Model) pour pouvoir configurer l’exécution des goals
Phases d’un Cycle de vie Maven
ValiderValiderValiderValider
CompilerCompilerCompilerCompiler
TesterTesterTesterTester
PackagerPackagerPackagerPackager
Tests d’intégrationTests d’intégrationTests d’intégrationTests d’intégration
VérifierVérifierVérifierVérifier
InstallerInstallerInstallerInstaller
DéployerDéployerDéployerDéployer
Goals mis en œuvre via des plugins
ValiderValiderValiderValider
CompilerCompilerCompilerCompiler
TesterTesterTesterTester
PackagerPackagerPackagerPackager
Tests d’intégrationTests d’intégrationTests d’intégrationTests d’intégration
VérifierVérifierVérifierVérifier
InstallerInstallerInstallerInstaller
DéployerDéployerDéployerDéployer
compiler:compilecompiler:compile
surfire:testsurfire:test
jar:jarjar:jar
Définition du build au format XML
Limitations du format XML
• Je ne puis exécuter que des goals qui ont été définis au sein de plugins existants
• L’apparition de nouveaux besoins requièrent :o D’attendre la mise à disposition d’une nouvelle
version du plugin
o De définir soit même un nouveau goal
Ajout d’un goal avec Maven
• Création du fichier pom du plugin
Ajout d’un goal avec Maven
• Création d’un Mojo
Ajout d’un goal avec Maven
• Intégration du goal dans le pom
Ajout d’une tâche avec SBT
• Dans SBT il y a le S pour Simple
Ajout d’une tâche avec SBT
• Dans SBT il y a le S pour Simple
L’architecture sbt repose sur
• L’exécution de tâches ordonnancées de manière explicite
• La configuration des tâches via des settings
• L’utilisation de Scala pour la définition des builds
Phases Maven versus task dependencies
Ordonnancement des goals Maven
• Exécution séquentielle des phases
• Ordonnancement implicite des goals (FIFO)
L’exécution d’une tâche SBT
• Est ordonnancée de manière explicite
• Produit un résultat exploitable pour les autres tâches
L’exécution d’une tâche SBT
• Est ordonnancée de manière explicite
• Produit un résultat exploitable pour les autres tâches
Exemple d’exploitabilité du résultat
Avantages SBT versus Maven
Performances
• Parallélisation de l’exécution des tâches
• Environnement de développement interactifo Mode console SBT versus outil en ligne de
commande Maveno Scala Read Evaluate Print Loop
• Méthode ~ pour l’exécution de tâche en continu
Performances Scala REPL
Gestion multi-projets
• Maven impose :o un lien d’héritage pour pouvoir partager des éléments
communso Une arborescence de fichiers dans le cadre de
l’aggrégation de modules
• SBT a supprimé ces 2 contraintes o Le principe d’Hollywoodo Possibilité de créer des dépendances « distantes »
Incompatibilité versions scala
• Cross Compilation SBT
• …
Incompatibilité versions scala
• … versus Maven injection
nécessitant de lancer autant de fois le même build qu’il existe de version cible
Gestion des dépendances (Aether versus Ivy)
• Maven via Aether ne peut gérer qu’un nombre fini de scopes
• SBT via Ivy s’appuie sur la notion de Configuration qui rend la gestion plus souple
o Permet de définir plus finement les artefacts à récupérer en fonction de la configuration choisie
Gestion des dépendances
SBT en entreprise
Mise en place d’un référentiel d’entreprise
maven-centralmaven-central
typesafetypesafescala-
sbtscala-
sbt
Conf. du gestionnaire d’artefacts
• Ajout des référentiels distants Ivyo sbt-plugin-releaseso typesafe-ivy-releaseso …
• Ajout des référentiels distants Maveno maven repo1o …
• Ajout d’un référentiel virtuel Ivy
• Ajout d’un référentiel virtuel Maven
Configuration de SBT
• Ajout des nouveaux dépôts
• Bloquer tous les autres dépôts définis au sein des builds SBTo sbt -Dsbt.override.build.repos=trueo Variable SBT_OPTS
Récupération des artefacts
Publication des artefacts
Publication des métriques dans sonar
Sources - Follow us on GitHub• maven2sbt :
https://github.com/ebiznext/maven2sbt
• sbt-cxf-wsdl2java :
https://github.com/ebiznext/sbt-cxf-wsdl2java
• sbt-groovy :
https://github.com/ebiznext/sbt-groovy
• sbt-soapui:
https://github.com/ebiznext/sbt-soapui
…
Questions ?