• Yann Le Moigne
• Indépendant
• Développeur Java depuis plus de 10 ans
• @LeMoigneY
Historique des outils de build Java
Apache Ant
Sortie en 2000
Description XML
<project name="MyProject" default="dist" basedir=".">

<description>

simple example build file

</description>

<property...
Problèmes
Aucune convention officielle
- Sur la structure projet
- Sur les phases a executer lors du build
- Comment gérer ...
Apache Maven
Sortie en 2004
Description XML
Basé sur des conventions
« Standardisant »
Structure projet Phase de build Dép...
<project xmlns=« http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocat...
Problèmes
Convention seulement
Pour tous besoin non couvert, il faut écrire un plugin
Donc gérer un projet à part…
Pour ch...
Gradle
Sortie en 2012
Description DSL Groovy
Basé sur des conventions
Structure projet Dépendances
custom/layout
apply plugin: 'java'



repositories {

jcenter()

}



dependencies {

compile 'org.slf4j:slf4j-api:1.7.7'



testCompile...
Avantages
DSL Lisible
Convention
Customization
Customization
DSL
Customization : Ajout d’un sourceset
sourceSets {

integration {

java.srcDir 'src/integration/java'

resources.srcDir 'sr...
Customization
task generateInfoJson {

File infoJsonFile = project.file("src/main/webapp/info.json")



doLast {

def builder = new Json...
Tache incrémentale
task generateInfoJson {

File infoJsonFile = project.file("src/main/webapp/info.json")



inputs.proper...
Intégration IDE
apply plugin: 'idea' apply plugin: 'eclipse'
Customization (encore)
idea {

module {

downloadJavadoc = tr...
Et en vrac
Parallélisation
Gradle Daemon
Gradle wrapper
Et plus encore :
Java
Groovy
Scala
Antlr
Android
Et en incubation :
assembler
C
CPP
Objective-C
Objective-CPP
Inconvénients par rapport à Ant
Moins standardisant
Moins de plugins disponible
Heu… …
Inconvénients par rapport à Maven
Questions ?
Prochain SlideShare
Chargement dans…5
×

Gradle

365 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
365
Sur SlideShare
0
Issues des intégrations
0
Intégrations
8
Actions
Partages
0
Téléchargements
6
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 ?

×