20091020 - Normandy Jug - Builders Battle

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    20091020 - Normandy Jug - Builders Battle - Presentation 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
    SlideShare Zeitgeist 2009

    + Arnaud HéritierArnaud Héritier Nominate

    custom

    414 views, 0 favs, 2 embeds more stats

    Présentation au NormandyJUG
    le 20 oct. 2009
    Buil more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 414
      • 379 on SlideShare
      • 35 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 1
    Most viewed embeds
    • 34 views on http://blog.aheritier.net
    • 1 views on http://feeds2.feedburner.com

    more

    All embeds
    • 34 views on http://blog.aheritier.net
    • 1 views on http://feeds2.feedburner.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories