Gradle

268 vues

Publié le

La présentation de Gradle faite aux Human Talk de Laval du 13/10/2015

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
268
Sur SlideShare
0
Issues des intégrations
0
Intégrations
9
Actions
Partages
0
Téléchargements
1
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Gradle

  1. 1. • Yann Le Moigne • Indépendant • Développeur Java depuis plus de 10 ans • @LeMoigneY
  2. 2. Historique des outils de build Java
  3. 3. Apache Ant Sortie en 2000 Description XML
  4. 4. <project name="MyProject" default="dist" basedir=".">
 <description>
 simple example build file
 </description>
 <property name="src" location="src"/>
 <property name="build" location="build"/>
 <property name="dist" location="dist"/>
 
 <target name="init">
 <mkdir dir="${build}"/>
 </target>
 
 <target name="compile" depends="init"
 description="compile the source " >
 <javac srcdir="${src}" destdir="${build}"/>
 </target>
 
 <target name="dist" depends="compile"
 description="generate the distribution" >
 <mkdir dir="${dist}/lib"/>
 <jar jarfile="${dist}/lib/MyProject.jar" basedir="${build}"/>
 </target>
 
 <target name="clean"
 description="clean up" >
 <delete dir="${build}"/>
 <delete dir="${dist}"/>
 </target>
 </project>
  5. 5. Problèmes Aucune convention officielle - Sur la structure projet - Sur les phases a executer lors du build - Comment gérer les dépendances (et leur transitivité) XML difficile a lire, surtout avec des ID/References dans tous les sens. Consécutivement difficulté de maintenance Difficile d’appréhender un build complexe fait par un autre
  6. 6. Apache Maven Sortie en 2004 Description XML Basé sur des conventions « Standardisant » Structure projet Phase de build Dépendances validate compile test package integration-test verify install deploy
  7. 7. <project xmlns=« http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation=« http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>
 
 <name>Maven Quick Start Archetype</name>
 <url>http://maven.apache.org</url>
 
 <dependencies>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.8.2</version>
 <scope>test</scope>
 </dependency>
 </dependencies>
 </project>
  8. 8. Problèmes Convention seulement Pour tous besoin non couvert, il faut écrire un plugin Donc gérer un projet à part… Pour chaque besoin soit : - il y a un plugin - il y a une option - il n’y pas de solution Le XML est toujours aussi verveux et peu lisible
  9. 9. Gradle Sortie en 2012 Description DSL Groovy Basé sur des conventions Structure projet Dépendances custom/layout
  10. 10. apply plugin: 'java'
 
 repositories {
 jcenter()
 }
 
 dependencies {
 compile 'org.slf4j:slf4j-api:1.7.7'
 
 testCompile 'junit:junit:4.11'
 }
  11. 11. Avantages DSL Lisible Convention Customization
  12. 12. Customization DSL
  13. 13. Customization : Ajout d’un sourceset sourceSets {
 integration {
 java.srcDir 'src/integration/java'
 resources.srcDir 'src/integration/resources'
 compileClasspath += [configurations.compile]
 }
 } Qui a besoin de dépendance spécifique configurations {
 integration
 }
 
 sourceSets {
 integration {
 java.srcDir 'src/integration/java'
 resources.srcDir 'src/integration/resources'
 compileClasspath += [configurations.compile, configurations.integration]
 }
 } dependencies { integration ‘my.integration:testing-lib:1.2.3’
 }
  14. 14. Customization
  15. 15. task generateInfoJson {
 File infoJsonFile = project.file("src/main/webapp/info.json")
 
 doLast {
 def builder = new JsonBuilder()
 builder {
 serverHost "localhost"
 ports {
 management 9999
 remoting 4447
 http 8080
 }
 version project.version
 }
 
 builder.writeTo(new PrintWriter(infoJsonFile)).close()
 }
 }
 tasks.jar.dependsOn generateInfoJson Custom task : Besoin de générer un fichier json {
 "host": "localhost",
 "ports":{
 "management": 9999,
 "remoting": 4447,
 "http": 8080
 },
 "version": "3.3-SNAPSHOT"
 } La tache s’écrit en groovy dans le fichier de build
  16. 16. Tache incrémentale task generateInfoJson {
 File infoJsonFile = project.file("src/main/webapp/info.json")
 
 inputs.property("version", project.version)
 outputs.file infoJsonFile
 
 doLast {
 def builder = new JsonBuilder()
 builder {
 serverHost "localhost"
 ports {
 management 9999
 remoting 4447
 http 8080
 }
 version project.version
 }
 
 builder.writeTo(new PrintWriter(infoJsonFile)).close()
 }
 }
 tasks.jar.dependsOn generateInfoJson
  17. 17. Intégration IDE apply plugin: 'idea' apply plugin: 'eclipse' Customization (encore) idea {
 module {
 downloadJavadoc = true
 downloadSources = true
 scopes.PROVIDED.plus += [configurations.provided]
 excludeDirs += [file('bin')]
 }
 }
  18. 18. Et en vrac Parallélisation Gradle Daemon Gradle wrapper
  19. 19. Et plus encore : Java Groovy Scala Antlr Android Et en incubation : assembler C CPP Objective-C Objective-CPP
  20. 20. Inconvénients par rapport à Ant Moins standardisant Moins de plugins disponible Heu… … Inconvénients par rapport à Maven
  21. 21. Questions ?

×