Your SlideShare is downloading. ×
20091020 - Normandy Jug - Builders Battle
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

20091020 - Normandy Jug - Builders Battle

1,771

Published on

Présentation au NormandyJUG …

Présentation au NormandyJUG
le 20 oct. 2009
Builders Battle - Ant, Ivy, Gradle, EasyAnt, Maven

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,771
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. NormandyJUG 20 octobre 2009 Builders Battle Maven / Ivy / Ant / Gradle / EasyAnt ...
  • 2. Grégory Boissinot
    • Committer Hudson depuis 2008
    • Consultant Zenika
      • Spécialiste sur les outils de build et l'intégration continue
      • Formateur sur l'usine logicielle
      • A mis en place Gradle chez un grand acteur de l'industrie
  • 3. Jean-Louis Boudart
    • Leader d’EasyAnt
    • Commiter Hudson
    • Consultant indépendant
      • Spécialiste sur les outils de build et d’intégration continue
  • 4. Xavier Hanin
    • Createur d’Apache Ivy
    • Architecte Principal 4SH
  • 5. Arnaud Héritier
      • eXo Platform - http://www.exoplatform.com
      • Software Factory Manager
        • Qualité
        • Outillage
        • Productivité des développements
    • Committer depuis 2004 et membre du PMC
    • Co-auteur « Apache Maven » aux éditions Pearson (FR)
  • 6. Programme
    • Un peu d’archéologie
    • Les protagonistes
      • Apache Maven
      • Apache Ivy
      • EasyAnt
      • Gradle
    • Le combat final
    • Questions / Réponses
  • 7. UN PEU D’ARCHÉOLOGIE
    • Retour au début du siècle
  • 8. Construction d’un war en 2002
    • Utilisation d’Eclipse limitée
      • Pas de WTP (uniquement dans la version payante d’IBM),
      • Eclipse ne permettait pas d’exporter des Wars
  • 9. Construction d’un war en 2002
    • Beaucoup de tâches manuelles
      • Modifier les fichiers de paramétrage
      • Exporter les différents jar
      • Copier les dépendances (et nos jars), dans un répertoire lib
      • Faire un zip que l’on renomme en war
      • Tagguer l’ensemble des sources dans le répertoire de sources (CVS)
      • Envoyer le fichier par FTP sur le serveur d’intégration
      • Se connecter à la console d’administration du serveur et déployer l’application
  • 10. Construction d’un war en 2002
    • Un seul problème, Y’a toujours des problèmes
      • Erreur dans la configuration
      • Oubli d’une dépendance
      • oubli d’un fichier
      • Correction de dernière minute qui introduit une régression…
      • Autres
    • Combien de temps ça prend ?
      • Quand tout va bien : 15 minutes
      • Quand il y a des problèmes : ½ journée
  • 11. APACHE MAVEN
    • Builders Battle
  • 12. Une première réponse : ANT
    • Ecriture d’un script
      • Permet d’automatiser le process
      • Durée du processus réduite de moitié
      • Le processus ne monopolise personne
        • On le lance et on passe à autre chose
  • 13. Les limites de ANT
    • Ecrire le script, c’est long
    • Modifier un script, c’est très long
    • Au final, le gains de temps n’est pas évident
      • Mais c’est quand même plus amusant
      • Il est possible de réutiliser le script !
  • 14. La réutilisation de scripts ANT
    • Les scripts ne sont pas directement réutilisables
      • Structure de projets différents
      • Besoins différents
    • Encore du temps perdu
      • Modification du script
      • Réécriture pour le rendre plus générique
    • Un nouveau métier s’est créé dans chaque projet : scripteur ANT
  • 15. Quelques exemples
    • J u nit : http://junit.cvs.sourceforge.net/viewvc/junit/junit/build.xml?view=markup
    • Findbugs : http://findbugs.googlecode.com/svn/trunk/findbugs/build.xml
    • J b oss SEAM : http://anonsvn.jboss.org/repos/seam/branches/community/Seam_2_0
  • 16. LES INTÉRÊTS POUR UN PROJET
    • Apache Maven
  • 17. Maven, le choix Projet
    • Le projet peut-être librement découpé en modules
      • Maven ne cristallise pas l’architecture de l’application
    • Gestion des dépendances
      • Déclaratif : Gestion automatique du téléchargement et de l’utilisation dans le projet.
      • Transitivité : On ne déclare que ce que l’on utilise
  • 18. Maven, le choix Projet
    • Centralise et automatise les différents aspects du développement de logiciels
    • Une seule chose qu’il ne peut faire à votre place  : Développer
      • Construction
      • Tests
      • Packaging
      • Déploiement
      • Documentation
      • Contrôles et rapports sur la qualité des développements
  • 19. LES INTÉRÊTS POUR UNE ENTREPRISE
    • Apache Maven
  • 20. Maven, le choix Entreprise
    • Standard du marché
      • Disponibilité des ressources
    • Standardisation des développements
      • Organisation des sources
      • Descripteur de projet
  • 21. Maven, le choix Entreprise
    • Rationnaliser les coûts
      • On ne réinvente pas la roue à chaque nouveau projet
      • Factorisation entre projets
    • Promotion de la qualité et intégration de l’outillage associé
  • 22. APACHE IVY
    • Builders Battle
  • 23. Qu'est ce qu'Apache Ivy
    • Un gestionnaire de dépendances
      • Resolving / Publishing / Reporting
    • Peut être utiliser en tant que
      • Plugin Ant
      • Librairie (Gradle, IDE Integration...)
      • Depuis la ligne de commande
    1/2
  • 24. Features
    • Flexible et configurable
    • Supporte les dépendances transitive
    • Assurer la reproductibilité d'un build
    • Robuste et documenté
    1/2
  • 25. Features
    • Gestionnaire de conflits
    • Intégration avec Ant
    • Comptabilité avec les dépôts maven
    • Support de gros graphes de dépendances
    1/2
  • 26. Comparatif Ivy / Maven POM
    • <ivy-module version=&quot;2.0&quot;>
    • <info organisation=&quot;org.jug.normandyjug&quot; module=&quot;hello-ivy&quot;/>
    • <dependencies>
    • <dependency org=&quot;commons-lang&quot; name=&quot;commons-lang&quot; rev=&quot;2.0&quot;/>
    • <dependency org=&quot;commons-cli&quot; name=&quot;commons-cli&quot; rev=&quot;1.0&quot;/>
    • </dependencies>
    • </ivy-module>
    • <dependency>
    • <groupId>commons-lang</groupId>
    • <artifactId>commons-lang</artifactId>
    • <version>2.0</version>
    • </dependency>
    1/2
  • 27. L'esprit d'Ivy : La flexibilité !
    • Adaptable à votre environnement selon vos besoin
    • Configurable et facilement intégrable
    • Large choix de repository (FTP, SSH, HTTP, iBiblio, etc...)
    • Nombreuses taches ant
    1/2
  • 28. L'esprit d'Ivy : La flexibilité !
    • Definir son propre parser
    • Rajouter des extra attributes
    • Personnaliser son versionning
      • Définir ses propres contraites de version (Alpha, Beta, RC, etc...)
      • Définir quel version est plus récente qu'une autre
    • Gestion de conflits
    • Cache (metadata, artifact)
    • Triggers
    1/2
  • 29. EASYANT
    • Builders Battle
  • 30. Qu’est ce qu'EasyAnt ?
    • Build system basé sur des standard (Ant + Ivy)
    • Open Source (Apache Software Foundation)
    • Architecture extensible à base de Plugins
    • Conventions
    • Simple, Flexible, Extensible
    1/2
  • 31. Objectif ?
    • Gérer le cycle de vie de nos applications
    • Industrialiser les développement
      • Ne pas réinventer la roue a chaque foi
      • Factoriser les ressources inter projet
      • Organisation des sources
    • Gestion des dépendances
    • Promouvoir la qualité et l'intégration
    • Rester souple et adaptable
    • Etre OpenSource!!
    1/2
  • 32. Plugins éxistant
    • Compilation : Java, Scala, Groovy
    • Packaging : Jar, War, OSGi
    • Test : Junit, TestNG
    • Couverture de code : Emma, Cobertura(*)
    • SCM : SVN
    • Divers: Checkstyle, Javadoc, Jetty, etc...
    • Documentation : DocBook, Xooki
    • Build types (Java standard, Java Web, Scala, etc...)
    1/2
  • 33. Features
    • Gestion du cycle de vie
    • Gestion multi-modules
    • Gestion de dépendances
      • Resolution
      • Reporting
      • Publication
    • Gestion de squelettes de projets
    • Phases
    • Build-configurations
    • Documentation des plugins auto-générée
    1/2
  • 34. Contribution connexes
    • Apache Ant
      • Phase
      • Import / Include
      • Abstraction du format d'entrée
    • Apache Ivy
      • Introduction d'un mécanisme d'héritage de méta donnée
    • Apache IvyDE
    • Beet ( http://beet.sourceforge.net/ )
      • Utilisation d'EasyAnt en tant que build-system
    1/2
  • 35. Prochaines versions
    • Abstraction de langage pour les plugins (XML, Java, Groovy?)
    • Simplifier le développement de plugin
    • Gestion de projet eclipse
    • Gestion de projet android
    • EasyAnt4e
    • Hudson
    1/2
  • 36. EasyAnt4e : intégration dans eclipse
    • Création / import de nouveau projet EasyAnt
    • Completion de code :
      • Les tags du descripteur de modules
      • Les plugins
      • Property
    • Classpath dynamique
    • Visualisation / Execution des targets
    1/2
  • 37. GRADLE
    • Builders Battle
  • 38. Gradle en quelque mots
    • Système de build complet et flexible à la Ant
    • Utilisation des conventions de Maven à la demande
    • Une gestion multi projet avancée
    • Utilisation de Apache Ivy comme gestionnaire de
    • dépendances
      • Utilisation par API
    • Support et Insertion totale dans une infrastructure
    • Maven et Ivy existante
    • Chaîne de build en Groovy
    • Modèle de description du build très riche
  • 39. Architecture CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
  • 40. Notion de tâche
    • Un script de build Gradle est défini par un ensemble de tâches sur lesquelle est ajouté des actions qui sont des closures Groovy
    <!-- build.gradle --> task distribution <<{ println &quot;Distribution&quot; } task release ( dependsOn : 'distribution')<<{ println &quot;Release&quot; } > gradle distribution Distribution > gradle release Distribution Release Tâche simple Accès à l'API Java
  • 41. Les tâches ont une API Copy myCopy = task (myCopy, type:Copy ) myCopy .from (file('resources')) myCopy .into (file('target')) myCopy .include ('**/*.txt', '**/*.xml') task mycopy ( type:Copy ) mycopy{ description ='Copies the resources dir' from (file('resources')) into (file('target')) include ('**/*.txt', '**/*.xml') } task mycopy ( type:Copy ){ description ='Copies the resources dir' from (file('resources')) into (file('target')) include ('**/*.txt', '**/*.xml') } Tâche améliorée CustomTask Copy mycopy
  • 42. Une API très riche task source( type:Jar ){ baseName='source' from sourceSets.main.java } task distrib( type:Zip ){ dependsOn(jar) baseName='dist' from sourceSets.main.java from jar.archivePath } CustomTask Abstract ArchiveTask Zip Jar War Tar SourceTask task javadoc( type: Javadoc ) { source sourceSets.main.allJava } Javadoc
  • 43. Plusieurs tâches par défaut <!-- build.xml --> <project default=&quot;all&quot; > <target name=&quot;clean&quot;> <echo message=&quot;Cleaning&quot;/> </target> <target name=&quot;jar&quot;> <echo message=&quot;Packaging&quot;/> </target> <target name=&quot;all&quot;> <antcall target=&quot;clean&quot;/> <antcall target=&quot;jar&quot;/> </target> </project> <!-- build.gradle --> defaultTasks 'clean', 'jar' task clean << { println &quot;Cleaning&quot; } task jar << { println &quot;Packaging&quot; } > ant Cleaning Packaging > gradle Cleaning Packaging
  • 44. Exécution unique et ordonnée compile compileTest test dist > ant test dist compile compileTest test compile compileTest test dist > gradle test dist :compile :compileTest :test :dist
  • 45. Pour un projet Java/JEE CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
  • 46. Build d'une librairie <!-- build.gradle --> usePlugin 'java' archivesBaseName = 'core' version = '3.5' manifest.mainAttributes ( 'Implementation-Version': version ) repositories { mavenCentral() } dependencies { compile group: 'commons-collections', name: 'commons-collections', version: '3.2' testCompile group: 'junit', name: 'junit', version: '4.+' } > gradle compileJava > gradle jar core-3.5.jar Gradle jar Configuration accessible sous forme de propriétés
  • 47. Build d'une webapp <!-- build.gradle --> usePlugin 'war' usePlugin 'jetty' archivesBaseName = 'web' version = '1.0' repositories { mavenCentral() } dependencies { compile &quot;commons-io : commons-io : 1.4&quot; compile (&quot;log4j : log4j : 1.2.15&quot;){ exclude(group:'javax.jms') exclude(group:'com.sun.jdmk') exclude(module:'jmxri') } } > gradle war > gradle jettyRun WEB-INF optionel JEE6 compatible web-2.4.war Gradle war
  • 48. Phases de build
    • Gradle fournit 3 phases distinctes de build
    • Initialisation
      • Détermine l'ensemble des projets à builder
      • Création d'un objet Projet pour chaque module
    • Configuration
      • Configuration des objets Project
    • Exécution
      • Exécution des tâches crées et configurés précédemment
    gradle.taskGraph.whenReady {taskGraph -> if (taskGraph .hasTask (':release')) { version = '1.0' } else { version = '1.0-SNAPSHOT' } } Nombreux hooks disponibles
  • 49. Intégration native avec Ant CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
  • 50. Utilisation possible des tâches Ant <!-- build.gradle --> task generateStub << { ant { def wsdl2java_classpath = path { fileset (dir: 'lib') { include(name: '*.jar') } } taskdef ( name: 'axisWsdl2java', classname: 'org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask', classpath: wsdl2java_classpath ) axisWsdl2java( output:&quot;generated&quot;, verbose:&quot;true&quot; , url:&quot;Exemple.wsdl&quot;) } } Utilisation de l'objet Groovy AntBuilder
  • 51. LES INTÉRÊTS POUR UNE ENTREPRISE Gradle
  • 52. Gradle, un choix pertinent en Entreprise
    • Utiliser Gradle en lieu et place de vos scripts Ant
      • Réutilisation (Import) de scripts Ant existant
      • Utilisation de toute tâche native
    • Utiliser Gradle avec votre infrastructure Ivy
      • Intégration plus profonde et plus riche
    • Utiliser Gradle avec votre infrastructure Maven
    • existante
      • Les même conventions que Maven
      • Simplicité de gestion des dépendances Maven
      • Flexibilité au besoin
  • 53. LES PROBLEMES Gradle
  • 54. Les problèmes
    • Ce qui manque
      • Gestion d'un ear pour JEE
      • Génération de la configuration IDEA et NetBeans
      • Intégration avec les outils de couvertures de code ou d'autres outils de métriques (Findbugs, …)
        • Délégation à des tâches Ant aujourd'hui
    • Un manque de maturité
      • Changement de la DSL entre chaque release
  • 55. LE COMBAT FINAL
    • Il n’en restera plus qu’un … ou pas
  • 56. LES DOCUMENTATIONS DOCUMENTATIONS ?
    • Apache Maven
  • 57. Quelques liens
    • Le site web :
      • http://maven.apache.org
    • Le wiki projet :
      • http://docs.codehaus.org/display/MAVEN
    • Le wiki utilisateurs :
      • http://docs.codehaus.org/display/MAVENUSER
  • 58. Ouvrages
    • Sonatype / O’Reilly :
      • The Definitive Guide
      • http://www.sonatype.com/books
      • Gratuit en version électronique
      • D’ici la fin de l’année (?) en français
  • 59. Ouvrages
    • Exist Global
      • Better builds with Maven
      • http://www.maestrodev.com/better-build-maven
      • Gratuit
      • Version électronique uniquement
  • 60. Ouvrages
    • Nicolas De loof – Arnaud Héritier
      • Aux éditions Pearson
      • Collection Référence
      • Un ouvrage original condensé de retours d’expériences
      • En français
      • Disponible le 20 Novembre
  • 61. Support
    • Listes de diffusion
      • http://maven.apache.org/mail-lists.html
    • IRC
      • irc.codehaus.org - #maven
    • Developpez.net
      • http://www.developpez.net/ forum maven
      • En français
    • Contrats de support
      • Sonatype et quelques autres entreprises
  • 62. DOCUMENTATIONS
    • EasyAnt
  • 63. Documentations / Contact
    • Le site web :
      • http://www.easyant.org/
    • La documentation :
      • http://www.easyant.org/doc/
    • La mailing list :
      • http://groups.google.com/group/easyant/
    • IRC:
      • irc.freenode.net - #easyant
    1/2
  • 64. LES DOCUMENTATIONS ? Gradle
  • 65. Quelques liens
    • Le site web :
      • http://www.gradle.org/
    • Un user guide
      • http://www.gradle.org/0.8/docs/userguide/userguide.html
      • http://www.gradle.org/0.8/docs/userguide/userguide.pdf
    • Un cookbook
      • http://docs.codehaus.org/display/GRADLE/Cookbook
    • Le wiki projet :
      • http://docs.codehaus.org/display/GRADLE/Home
  • 66. Support
    • Liste de diffusion
      • http://www.gradle.org/lists.html
    • Support commercial
      • http://www.gradle.biz/
  • 67. LA COMMUNAUTÉ
    • Apache Maven
  • 68. La communauté des utilisateurs
    • 1780 inscrits sur la liste de diffusion des utilisateurs
    • Statistiques sur 90 jours
    • En bleu le nombre d’inscrits
    • En rouge le nombre de messages par jours
  • 69. Le site web
  • 70. Les téléchargements
    • Nombre de téléchargements par mois depuis un an
  • 71. L’équipe projet
    • Près de 60 committeurs enregistrés,
    • Plus de 20 actifs depuis le début de l’année,
    • Des entreprises comme Sonatype ou MaestroDev fournissent des ressources pour le projet et du support professionnel pour les utilisateurs,
    • Une communauté de développeurs moins isolée : rapprochements avec Eclipse, Jetty, …
  • 72. LA COMMUNAUTÉ
    • EasyAnt
  • 73. Vie du projet
    • 1 ans d'existence
    • 6 développeur enregistrés
    • 3 développeur actif
    • Constante évolution
    • Un produit loin d’être « parfait »,
    • Encore beaucoup de choses à faire
      • Aidez nous à le faire évoluer
    1/2
  • 74. LA COMMUNAUTÉ Gradle
  • 75. La communauté des utilisateurs
    • Les utilisateurs Groovy
  • 76. L'équipe projet
    • 6 committeurs enregistrés
    • L'entreprise « Gradle inc » soutient le projet
    • De nouvelles contributions arrivent
  • 77. SOUS LE CAPOT
    • Diesel ou essence ?
  • 78. Gradle fournit des cycles de vies (1/2)
    • Ensemble de tâches prédéfinies
    Exemple du plugin 'java'
  • 79. Des conventions de répertoires
    • Gradle utilise par défaut les mêmes conventions de répertoires que Maven
    <!-- répertoires --> + build.gradle +src/main/java +src/main/resources +src/main/webapp +src/test/java +src/test/resources +build/classes +build/libs +build/reports +build/test-results <!-- build.gradle --> sourceSets{ main{ java { srcDir 'src/java' } resources { srcDir 'src/resources' } } main{ java { srcDir 'src2/java' } resources { srcDir 'src2/resources' } } } Très configurable Séparation propre
  • 80. Gestion des dépendances avec Ivy CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
  • 81. Gestion des dépendances
    • Support complet de repository Maven ou Ivy existant
    • Interaction possible avec un gestionnaire de configuration
      • Gestion des dépendances transitives (client module)
    Gradle VCS Repository Maven local/distant Repository Ivy local/distant Artifacts + méta Maven (pom.xml) Artifacts + méta Ivy (ivy.xml) Artifacts + méta gradle Ivy
  • 82. Définition des repositories repositories { mavenCentral() mavenRepo urls:&quot;http://serveur/archiva/repo-group&quot; } repositories { flatDir name: 'localRepository', dirs: 'lib' } repositories { add( new org.apache.ivy.plugins.resolver.FileSystemResolver()){ name = 'repo' addArtifactPattern &quot; $projectDir/lib/[module]_[revision].[ext] &quot; descriptor = 'optional' checkmodified = true } }
  • 83. Déclaration des dépendances
    • Dépendances vers des modules (+deps)
    dependencies { compile &quot;log4j:log4j:1.2.14&quot; testCompile &quot;junit:junit:4.7&quot; }
    • Dépendances vers des artefacts (-deps)
    dependencies { runtime &quot;org.groovy:groovy:1.5.6@jar&quot; }
    • Client modules
    dependencies { runtime module(&quot;commons-lang:commons-lang:2.4&quot;) { dependency(&quot;commons-io:commons-io:1.2&quot;) } } Dépendances transitives sans XML
  • 84. Gradle et Ant: dans les deux sens (1/2) <!-- build.xml --> <property name=&quot;src.dir&quot; value =&quot;src&quot; > <target name=&quot;compile&quot; > <echo message=&quot;Compile,from Ant&quot;/> </target> <!-- build.gradle --> ant.importBuild 'build.xml' //Complément de la tâche compile compile << { println &quot;Added compiling from Gradle&quot; println &quot;SourceDir: ${ant.properties['src.dir']}&quot; } > gradle compile :compile [ant:echo] Compile, from Ant Added compiling from Gradle SourceDir: src
  • 85. Gradle et Ant: dans les deux sens (2/2) <!-- build.xml --> <target name=&quot; deploy &quot; depends=&quot;assemble&quot; > <echo message=&quot;Deploy, from Ant&quot;/> </target> <!-- build.gradle --> task assemble ( dependsOn: 'compile' ) << { println 'Assemble, from Gradle' } > gradle deploy :compile [ant:echo] Compile, from Ant Added compiling from Gradle :assemble Assemble, from Gradle :deploy [ant:echo] Deploy, from Ant
  • 86. Gestion multi projet très avancée CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
  • 87. Gestion multi projet (1/3)
    • Les descripteurs dans les sous modules sont optionnels
    • Injection de configuration
    • Possibilité de mettre toute la logique de build dans le parent
    <!-- Structure de répertoires --> + build.gradle + settings.gradle +common/ +pz/ + build.gradle -biz/ - biz-auth/ common biz-auth pz depends depends war war jar <!-- settings.gradle --> include &quot;common&quot;, &quot;pz&quot;, &quot;biz:auth&quot;
  • 88. Gestion multi projet (2/3) <!-- master build.gradle --> subprojects { usePlugin('java') group='org.jug.normandyjug' version='1.0' repositories{ mavenCentral() } dependencies { testCompile 'junit:junit:4.7' } } project(':biz:biz-auth') { dependencies{ compile project(':common') } usePlugin 'war' } <!-- pz/build.gradle --> usePlugin 'war' dependencies{ compile project(':common') } cross project configuration
  • 89. Gestion multi projet (3/3) /web> gradle compileJava :common:compileJava :common:processResources :common:classes :common:jar :common:uploadDefaultInternal :pz:compileJava :biz:biz-auth:compileJava /web/biz/biz-auth> gradle compileJava :common:compileJava :common:processResources :common:classes :common:jar :common:uploadDefaultInternal :biz:biz-auth:compileJava /web/biz/biz-auth> gradle compileJava -a :biz:biz-auth:compileJava Compilation des projets dépendants Utilisation des jars dans le cache
  • 90. Gradle GUI
    • Lancé par
    • > gradle –gui
    • Exécution de tâches
    • Paramétrage du niveau de log
  • 91. Publie dans une infra Maven et Ivy CORE UI DOCS OPEN-API WRAPPER api project-reports code-quality groovy java maven osgi war jetty scala eclipse plugins build tools Ant Ivy Maven Ant Tasks checkstyle codeNarc webdav other dependencies librairies tierces Gradle Groovy
  • 92. Publication dans des repo Ivy usePlugin 'java' version='1.0' uploadArchives{ repositories{ flatDir( dirs:'destRepo') } } IVY API Gradle Repository Ivy Artifacts + meta Ivy > gradle uploadArchives upload Archives
  • 93. Publication dans des repo Maven usePlugin 'java' usePlugin 'maven' group= 'org.jug.normandyjug' archivesBaseName= 'artefact-ex' version='1.0-SNAPSHOT' uploadArchives { repositories .mavenDeployer { snapshotRepository (url: &quot;http://serveur/archiva/repository/snapshots&quot;)  } > gradle install > gradle uploadArchives Repository Maven loca l Repository Maven distant Maven Ant Tasks Gradle Artifacts + meta Maven Artifacts + meta Maven install upload Archives
  • 94. Production de plusieurs artefacts
    • Une librairie/module peut avoir plusieurs artefacts
    <!-- sample/build.xml --> usePlugin 'java' task sourceJar(type: Jar) task distrib(type: Zip) artifacts{ archives sourceJar, distrib } repositories{ flatDir name:'repo', dirs:'repo' } uploadArchives { repositories { add project.repositories.repo } } > gradle uploadArchives ivy.xml Gradle upload Archives Repository Ivy dist -1.0.zip sample -1.0.jar source -1.0.jar
  • 95. Gestion simplifié des configurations usePlugin 'java' configurations{ sources master { extendsFrom archives, sources } } artifacts{ sources sourceJar master distrib } uploadArchives { repositories{ flatDir(dirs: file('repos'), name:'destRepo') } } uploadSources { repositories{ add project.uploadArchives.repositories.destRepo } } uploadMaster .repositories=uploadSources.repositories Ajout automatique de build[ConfigurationName] et upload[ConfigurationName]
  • 96. Agir simplement sur le cycle de vie
    • Un cycle de vie Gradle est composé d'un ensemble
    • de tâches
      • Chaque tâche est une propriété du projet
      • Chaque tâche possède une propriété « enabled »
    compileTestJava.enabled=false processTestResources.enabled=false testClasses.enabled=false test.enabled=false
  • 97. Portée des dépendances (1/2) <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2;14</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.0</version> <scope> provided </scope> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.2</version> </dependency> <!-- Contenu de l'archive --> WEB-INF/lib - log4j-1.2.14.jar - commons-codec-1.2jar commons-httpclient Common-codec
  • 98. Portée des dépendances (2/2)
    • Le plugin ' war ' fournit les scopes ' providedCompile ' et ' providedRuntime '
    <build.gradle --> dependencies { compile &quot;log4j:log4j:1.2.14&quot; providedCompile &quot;commons-httpclient:commons-httpclient:3.0&quot; compile &quot;commons-codec:commons-codec:1.2&quot; } <!-- Contenu de l'archive --> WEB-INF/lib - log4j-1.2.14.jar
  • 99. Questions ?
  • 100. Licence et droits d’auteurs
    • Les photos et logos appartiennent à leurs auteurs respectifs
    • Le contenu de la présentation est sous licence Creative Commons 2.0 France
      • Contrat Paternité
      • Pas de modification
    • http://creativecommons.org/licenses/by-nd/2.0/fr/
  • 101. Sponsors

×