SlideShare uma empresa Scribd logo
1 de 67
Baixar para ler offline
Groovy, les mains
dans le cambouis
GuillaumeLaforge
Groovy Project Manager
SpringSource / VMware
GuillaumeLaforge
@glaforge 
http://glaforge.appspot.com 
http://gplus.to/glaforge 
GVM, Groovy enVironment Manager
pour installerfacilementGroovy
Grails, Gradle, Griffon, Vert.x
Installation de GVM,
Groovy et Gradle
http://gvmtool.net
InstallationdeGVM,GroovyetGradle
• Installation de GVM
• Installation de Groovy
• Installtion de Gradle
curl	
  -­‐s	
  get.gvmtool.net	
  |	
  bash
gvm	
  install	
  groovy
gvm	
  install	
  gradle
Vérifiezvotreinstallation
$	
  groovy	
  -­‐-­‐version
Groovy	
  Version:	
  2.1.3	
  JVM:	
  1.7.0_09	
  Vendor:	
  Oracle	
  
Corporation	
  OS:	
  Mac	
  OS	
  X
$	
  gradle	
  -­‐-­‐version
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐
Gradle	
  1.5
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐
Gradle	
  build	
  time:	
  mercredi	
  27	
  mars	
  2013	
  13	
  h	
  51	
  UTC
Groovy:	
  1.8.6
Ant:	
  Apache	
  Ant(TM)	
  version	
  1.8.4	
  compiled	
  on	
  May	
  22	
  2012
Ivy:	
  2.2.0
JVM:	
  1.7.0_09	
  (Oracle	
  Corporation	
  23.5-­‐b02)
OS:	
  Mac	
  OS	
  X	
  10.8.3	
  x86_64
Quelques bases,
pour apprendre Groovy
A la découverte
de Groovy...
L’artillerieGroovy-esque
Commande groovy
Compilateur groovyc
REPL groovysh
Console Swing groovyConsole
« Groovy, c’est
comme Java,
mais sans
le costume
trois pièces »
Unepersonne...sauceJava
public	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name;
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name;
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name;
	
  	
  	
  	
  }
}
Unepersonne...sauceJava
public	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name;
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name;
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name;
	
  	
  	
  	
  }
}
Les points-virgules,
c’est pour les Mickeys !
Unepersonne...sauceJava
public	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Unepersonne...sauceJava
public	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
En Groovy, la visitbilité
est public par défaut
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Le return aussi
est optionnel
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Groovy a la notion
de propriétés
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name
	
  	
  	
  	
  }
}
Un langage sexy
avec des GString
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  ${name}"
	
  	
  	
  	
  }
}
Unepersonne...sauceJava
	
  	
  	
  	
  	
  	
  	
  class	
  Person	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  ${name}"
	
  	
  	
  	
  }
}
Reformattons tout
ce beau bazar
Unepersonne...sauceGroovy!
class	
  Person	
  {
	
  	
  	
  	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  ${name}"
	
  	
  	
  	
  }
}
Unepersonne...sauceGroovy!
class	
  Person	
  {
	
  	
  	
  	
  String	
  name
	
  	
  	
  	
  
	
  	
  	
  	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  "Hello,	
  my	
  name	
  is	
  ${name}"
	
  	
  	
  	
  }
}
public	
  class	
  Person	
  {
	
  	
  	
  	
  private	
  String	
  name;
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  getName()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  name;
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  void	
  setName(String	
  name)	
  {
	
  	
  	
  	
  	
  	
  	
  	
  this.name	
  =	
  name;
	
  	
  	
  	
  }
	
  	
  	
  	
  
	
  	
  	
  	
  public	
  String	
  greet()	
  {
	
  	
  	
  	
  	
  	
  	
  	
  return	
  "Hello,	
  my	
  name	
  is	
  "	
  +	
  name;
	
  	
  	
  	
  }
}
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person();
person.setName("Guillaume");
System.out.println(person.greet());
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person();
person.setName("Guillaume");
System.out.println(person.greet());
Sans points-
virgules
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.setName("Guillaume")
System.out.println(person.greet())
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.setName("Guillaume")
System.out.println(person.greet())
println version
raccourcie
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.setName("Guillaume")
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println(person.greet())
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.setName("Guillaume")
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println(person.greet())
sans
parenthèses
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.setName	
  "Guillaume"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.setName	
  "Guillaume"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
notation d’accès
aux propriétés
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.name	
  =	
  	
  "Guillaume"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
Commentluifairedirebonjour...
Person	
  person	
  =	
  new	
  Person()
person.name	
  =	
  	
  "Guillaume"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
typage
optionnel
Commentluifairedirebonjour...
def	
  	
  	
  	
  person	
  =	
  new	
  Person()
person.name	
  =	
  	
  "Guillaume"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
Commentluifairedirebonjour...
def	
  	
  	
  	
  person	
  =	
  new	
  Person()
person.name	
  =	
  	
  "Guillaume"
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
constructeur avec
paramètres nommés
Commentluifairedirebonjour...
def	
  	
  	
  	
  person	
  =	
  new	
  Person(name:	
  "Guillaume")
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
Commentluifairedirebonjour...
def	
  	
  	
  	
  person	
  =	
  new	
  Person(name:	
  "Guillaume")
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  println	
  person.greet()	
  
un petit coup de
reformat pour les yeux
Commentluifairedirebonjour...
def	
  person	
  =	
  new	
  Person(name:	
  "Guillaume")
println	
  person.greet()	
  
On va se
faire la cloture...
Closures—ou«clotures»
• Pas besoin d’attendre JDK 8 en 2014
• Groovy a des closures depuis 2003 !
• C’est quoi une closure ?
• bloc de code réutilisable
• assignable dans une variable
• qu’on peut passer en paramètre d’une méthode
• pouvant prendre des arguments
• y compris des valeurs par défaut
Le défilé des
collections
Syntaxespécialepourlescollections
def	
  list	
  =	
  [1,	
  2,	
  4,	
  'a',	
  'b',	
  'c']
assert	
  list[3]	
  ==	
  'a'
list	
  <<	
  'd'
assert	
  list[6]	
  ==	
  'd'
def	
  range	
  =	
  1..10
assert	
  range.size()	
  ==	
  10
def	
  map	
  =	
  [a:	
  1,	
  b:	
  2,	
  c:	
  3]
assert	
  map['b']	
  ==	
  2
assert	
  map.b	
  ==	
  2
map['d']	
  =	
  'Mix'
map.e	
  =	
  'IT'
assert	
  [map.d,	
  map['e']].join('-­‐')	
  ==	
  'Mix-­‐IT'
Syntaxespécialepourlescollections
def	
  list	
  =	
  [1,	
  2,	
  4,	
  'a',	
  'b',	
  'c']
assert	
  list[3]	
  ==	
  'a'
list	
  <<	
  'd'
assert	
  list[6]	
  ==	
  'd'
def	
  range	
  =	
  1..10
assert	
  range.size()	
  ==	
  10
def	
  map	
  =	
  [a:	
  1,	
  b:	
  2,	
  c:	
  3]
assert	
  map['b']	
  ==	
  2
assert	
  map.b	
  ==	
  2
map['d']	
  =	
  'Mix'
map.e	
  =	
  'IT'
assert	
  [map.d,	
  map['e']].join('-­‐')	
  ==	
  'Mix-­‐IT'
Liste
Syntaxespécialepourlescollections
def	
  list	
  =	
  [1,	
  2,	
  4,	
  'a',	
  'b',	
  'c']
assert	
  list[3]	
  ==	
  'a'
list	
  <<	
  'd'
assert	
  list[6]	
  ==	
  'd'
def	
  range	
  =	
  1..10
assert	
  range.size()	
  ==	
  10
def	
  map	
  =	
  [a:	
  1,	
  b:	
  2,	
  c:	
  3]
assert	
  map['b']	
  ==	
  2
assert	
  map.b	
  ==	
  2
map['d']	
  =	
  'Mix'
map.e	
  =	
  'IT'
assert	
  [map.d,	
  map['e']].join('-­‐')	
  ==	
  'Mix-­‐IT'
Liste
Range
Syntaxespécialepourlescollections
def	
  list	
  =	
  [1,	
  2,	
  4,	
  'a',	
  'b',	
  'c']
assert	
  list[3]	
  ==	
  'a'
list	
  <<	
  'd'
assert	
  list[6]	
  ==	
  'd'
def	
  range	
  =	
  1..10
assert	
  range.size()	
  ==	
  10
def	
  map	
  =	
  [a:	
  1,	
  b:	
  2,	
  c:	
  3]
assert	
  map['b']	
  ==	
  2
assert	
  map.b	
  ==	
  2
map['d']	
  =	
  'Mix'
map.e	
  =	
  'IT'
assert	
  [map.d,	
  map['e']].join('-­‐')	
  ==	
  'Mix-­‐IT'
Liste
Range
Map
Vousavezvule«powerassert»deGroovy?
def	
  (e,	
  m,	
  c)	
  =	
  [123,	
  1,	
  3e9]
assert	
  e	
  ==	
  m	
  *	
  c	
  *	
  2
Vousavezvule«powerassert»deGroovy?
def	
  (e,	
  m,	
  c)	
  =	
  [123,	
  1,	
  3e9]
assert	
  e	
  ==	
  m	
  *	
  c	
  *	
  2
Assignation
multiple
Vousavezvule«powerassert»deGroovy?
def	
  (e,	
  m,	
  c)	
  =	
  [123,	
  1,	
  3e9]
assert	
  e	
  ==	
  m	
  *	
  c	
  *	
  2
Assertion	
  failed:	
  
assert	
  e	
  ==	
  m	
  *	
  c	
  *	
  2
	
  	
  	
  	
  	
  	
  	
  |	
  |	
  	
  |	
  |	
  |	
  |
	
  	
  	
  	
  	
  	
  	
  |	
  |	
  	
  1	
  |	
  |	
  6E+9
	
  	
  	
  	
  	
  	
  	
  |	
  false|	
  3E+9
	
  	
  	
  	
  	
  	
  	
  123	
  	
  	
  	
  3E+9
Assignation
multiple
Vousavezvule«powerassert»deGroovy?
def	
  (e,	
  m,	
  c)	
  =	
  [123,	
  1,	
  3e9]
assert	
  e	
  ==	
  m	
  *	
  c	
  *	
  2
Assertion	
  failed:	
  
assert	
  e	
  ==	
  m	
  *	
  c	
  *	
  2
	
  	
  	
  	
  	
  	
  	
  |	
  |	
  	
  |	
  |	
  |	
  |
	
  	
  	
  	
  	
  	
  	
  |	
  |	
  	
  1	
  |	
  |	
  6E+9
	
  	
  	
  	
  	
  	
  	
  |	
  false|	
  3E+9
	
  	
  	
  	
  	
  	
  	
  123	
  	
  	
  	
  3E+9
Toutes les
valeurs des
sous-
expressions
Assignation
multiple
La
magie
de la méta-
programmation
Créer un projetGradle
Utiliser le pluginGroovy
Bon, ben...
c’est parti !
CréerunprojetetappliquerlepluginGroovy
• Dans un nouveau répertoire projet,
créer un fichier build.gradle, contenant :
apply	
  plugin:	
  'groovy'
repositories	
  {
	
  	
  	
  	
  mavenCentral()
}
dependencies	
  {
	
  	
  	
  	
  compile	
  'org.codehaus.groovy:groovy-­‐all:2.1.3'
	
  	
  	
  	
  testCompile	
  
	
  	
  	
  	
  	
  	
  	
  	
  'org.spockframework:spock-­‐core:0.7-­‐groovy-­‐2.0'
}
CréerunprojetetappliquerlepluginGroovy
• Créer quelques répertoires :
• src/main/groovy
• src/test/groovy
CréerunprojetetappliquerlepluginGroovy
• Créer quelques répertoires :
• src/main/groovy
• src/test/groovy
Nos fichiers source
Java & Groovy
CréerunprojetetappliquerlepluginGroovy
• Créer quelques répertoires :
• src/main/groovy
• src/test/groovy
Nos fichiers source
Java & Groovy
Pour découvrir le
frameworkdetestSpock
CréerunprojetetappliquerlepluginGroovy
• Lister les tâches disponibles :
$	
  gradle	
  tasks
Pour tester et
builder notre projet
Pour tester et
builder notre projet
Générer la
documentation
Pour tester et
builder notre projet
Générer la
documentation
Pour lancer
les tests
Pour tester et
builder notre projet
Générer la
documentation
Pour lancer
les tests
Faire un peu
le ménage
Spock :
Enterprise test
framework
Questions&Réponses
Merci!
@glaforge 
http://glaforge.appspot.com 
http://gplus.to/glaforge 
Créditsimages
• canon
http://uponamidnightdreary.com/wp-content/uploads/2011/12/AR22442.jpg
• costume
http://cdn2.kebello.com/8235-thickbox/costume-3-pieces-ref-patrick.jpg
• mickey
http://4.bp.blogspot.com/-i9hzB7QYgq4/To9UufDo5dI/AAAAAAAAB2g/lKHHMm-KC68/s1600/f787ec3b56c3bd76_mickey-mouse.jpg
• gstring
http://cdnb.lystit.com/photos/2012/11/23/dg-noir-gstring-product-1-5588280-166851249_large_flex.jpeg
• défilé
http://www.lesreceptionstendances.com/wp-content/uploads/2012/07/organiser-un-d%C3%A9fil%C3%A9-de-mode-4.jpg
• fantasia
http://images.wikia.com/disney/images/d/d8/Fantasia-disneyscreencaps.com-2363.jpg
• Spock
http://images1.fanpop.com/images/photos/2500000/Zachary-Quinto-Spock-star-trek-2597267-2560-1921.jpg
• cloture
http://www.lusitane.fr/Userfiles/image/cloture-beton-pedra%20(17).JPG

Mais conteúdo relacionado

Mais de Guillaume Laforge

Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012Guillaume Laforge
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Guillaume Laforge
 
Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Guillaume Laforge
 
Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012Guillaume Laforge
 
Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012Guillaume Laforge
 
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume LaforgeGroovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume LaforgeGuillaume Laforge
 
Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Guillaume Laforge
 
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011Guillaume Laforge
 
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGuillaume Laforge
 
Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011Guillaume Laforge
 
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Guillaume Laforge
 
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...Guillaume Laforge
 
Cloud foundry intro with groovy
Cloud foundry intro with groovyCloud foundry intro with groovy
Cloud foundry intro with groovyGuillaume Laforge
 
Groovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume LaforgeGroovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume LaforgeGuillaume Laforge
 
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGuillaume Laforge
 
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Guillaume Laforge
 
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011Guillaume Laforge
 

Mais de Guillaume Laforge (20)

Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012Groovy 2.0 update at Devoxx 2012
Groovy 2.0 update at Devoxx 2012
 
Groovy 2.0 webinar
Groovy 2.0 webinarGroovy 2.0 webinar
Groovy 2.0 webinar
 
Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012Groovy Domain Specific Languages - SpringOne2GX 2012
Groovy Domain Specific Languages - SpringOne2GX 2012
 
Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012Groovy update at SpringOne2GX 2012
Groovy update at SpringOne2GX 2012
 
JavaOne 2012 Groovy update
JavaOne 2012 Groovy updateJavaOne 2012 Groovy update
JavaOne 2012 Groovy update
 
Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012Groovy 1.8 et 2.0 au BreizhC@mp 2012
Groovy 1.8 et 2.0 au BreizhC@mp 2012
 
Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012Groovy 1.8 and 2.0 at GR8Conf Europe 2012
Groovy 1.8 and 2.0 at GR8Conf Europe 2012
 
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume LaforgeGroovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
Groovy 2.0 update - Cloud Foundry Open Tour Moscow - Guillaume Laforge
 
Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012Groovy 2.0 - Devoxx France 2012
Groovy 2.0 - Devoxx France 2012
 
Whats new in Groovy 2.0?
Whats new in Groovy 2.0?Whats new in Groovy 2.0?
Whats new in Groovy 2.0?
 
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
Groovy Update, new in 1.8 and beyond - Guillaume Laforge - Devoxx 2011
 
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume LaforgeGPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
GPars et PrettyTime - Paris JUG 2011 - Guillaume Laforge
 
Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011Groovy Update - Guillaume Laforge - Greach 2011
Groovy Update - Guillaume Laforge - Greach 2011
 
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
Gaelyk update - Guillaume Laforge - SpringOne2GX 2011
 
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
Groovy Update, what's new in Groovy 1.8 and beyond - Guillaume Laforge - Spri...
 
Cloud foundry intro with groovy
Cloud foundry intro with groovyCloud foundry intro with groovy
Cloud foundry intro with groovy
 
Groovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume LaforgeGroovy update - S2GForum London 2011 - Guillaume Laforge
Groovy update - S2GForum London 2011 - Guillaume Laforge
 
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume LaforgeGroovy DSLs - S2GForum London 2011 - Guillaume Laforge
Groovy DSLs - S2GForum London 2011 - Guillaume Laforge
 
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
Gaelyk - Guillaume Laforge - GR8Conf Europe 2011
 
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
Groovy 1.8 update - Guillaume Laforge - GR8Conf Europe 2011
 

Groovy workshop à Mix-IT 2013

  • 1.
  • 2. Groovy, les mains dans le cambouis GuillaumeLaforge Groovy Project Manager SpringSource / VMware
  • 4. GVM, Groovy enVironment Manager pour installerfacilementGroovy Grails, Gradle, Griffon, Vert.x Installation de GVM, Groovy et Gradle
  • 6. InstallationdeGVM,GroovyetGradle • Installation de GVM • Installation de Groovy • Installtion de Gradle curl  -­‐s  get.gvmtool.net  |  bash gvm  install  groovy gvm  install  gradle
  • 7. Vérifiezvotreinstallation $  groovy  -­‐-­‐version Groovy  Version:  2.1.3  JVM:  1.7.0_09  Vendor:  Oracle   Corporation  OS:  Mac  OS  X $  gradle  -­‐-­‐version -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ Gradle  1.5 -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ Gradle  build  time:  mercredi  27  mars  2013  13  h  51  UTC Groovy:  1.8.6 Ant:  Apache  Ant(TM)  version  1.8.4  compiled  on  May  22  2012 Ivy:  2.2.0 JVM:  1.7.0_09  (Oracle  Corporation  23.5-­‐b02) OS:  Mac  OS  X  10.8.3  x86_64
  • 8. Quelques bases, pour apprendre Groovy A la découverte de Groovy...
  • 10. « Groovy, c’est comme Java, mais sans le costume trois pièces »
  • 11. Unepersonne...sauceJava public  class  Person  {        private  String  name;                public  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        } }
  • 12. Unepersonne...sauceJava public  class  Person  {        private  String  name;                public  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        } } Les points-virgules, c’est pour les Mickeys !
  • 13. Unepersonne...sauceJava public  class  Person  {        private  String  name                public  String  getName()  {                return  name        }                public  void  setName(String  name)  {                this.name  =  name        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name        } }
  • 14. Unepersonne...sauceJava public  class  Person  {        private  String  name                public  String  getName()  {                return  name        }                public  void  setName(String  name)  {                this.name  =  name        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name        } } En Groovy, la visitbilité est public par défaut
  • 15. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                return  name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                return  "Hello,  my  name  is  "  +  name        } }
  • 16. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                return  name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                return  "Hello,  my  name  is  "  +  name        } } Le return aussi est optionnel
  • 17. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                              name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                              "Hello,  my  name  is  "  +  name        } }
  • 18. Unepersonne...sauceJava              class  Person  {        private  String  name                              String  getName()  {                              name        }                              void  setName(String  name)  {                this.name  =  name        }                              String  greet()  {                              "Hello,  my  name  is  "  +  name        } } Groovy a la notion de propriétés
  • 19. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        } }
  • 20. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  "  +  name        } } Un langage sexy avec des GString
  • 21. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        } }
  • 22. Unepersonne...sauceJava              class  Person  {                        String  name                                                                                                                                          String  greet()  {                              "Hello,  my  name  is  ${name}"        } } Reformattons tout ce beau bazar
  • 23. Unepersonne...sauceGroovy! class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        } }
  • 24. Unepersonne...sauceGroovy! class  Person  {        String  name                String  greet()  {                "Hello,  my  name  is  ${name}"        } } public  class  Person  {        private  String  name;                public  String  getName()  {                return  name;        }                public  void  setName(String  name)  {                this.name  =  name;        }                public  String  greet()  {                return  "Hello,  my  name  is  "  +  name;        } }
  • 25. Commentluifairedirebonjour... Person  person  =  new  Person(); person.setName("Guillaume"); System.out.println(person.greet());
  • 26. Commentluifairedirebonjour... Person  person  =  new  Person(); person.setName("Guillaume"); System.out.println(person.greet()); Sans points- virgules
  • 27. Commentluifairedirebonjour... Person  person  =  new  Person() person.setName("Guillaume") System.out.println(person.greet())
  • 28. Commentluifairedirebonjour... Person  person  =  new  Person() person.setName("Guillaume") System.out.println(person.greet()) println version raccourcie
  • 29. Commentluifairedirebonjour... Person  person  =  new  Person() person.setName("Guillaume")                      println(person.greet())
  • 30. Commentluifairedirebonjour... Person  person  =  new  Person() person.setName("Guillaume")                      println(person.greet()) sans parenthèses
  • 31. Commentluifairedirebonjour... Person  person  =  new  Person() person.setName  "Guillaume"                      println  person.greet()  
  • 32. Commentluifairedirebonjour... Person  person  =  new  Person() person.setName  "Guillaume"                      println  person.greet()   notation d’accès aux propriétés
  • 33. Commentluifairedirebonjour... Person  person  =  new  Person() person.name  =    "Guillaume"                      println  person.greet()  
  • 34. Commentluifairedirebonjour... Person  person  =  new  Person() person.name  =    "Guillaume"                      println  person.greet()   typage optionnel
  • 35. Commentluifairedirebonjour... def        person  =  new  Person() person.name  =    "Guillaume"                      println  person.greet()  
  • 36. Commentluifairedirebonjour... def        person  =  new  Person() person.name  =    "Guillaume"                      println  person.greet()   constructeur avec paramètres nommés
  • 37. Commentluifairedirebonjour... def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()  
  • 38. Commentluifairedirebonjour... def        person  =  new  Person(name:  "Guillaume")                        println  person.greet()   un petit coup de reformat pour les yeux
  • 39. Commentluifairedirebonjour... def  person  =  new  Person(name:  "Guillaume") println  person.greet()  
  • 40. On va se faire la cloture...
  • 41. Closures—ou«clotures» • Pas besoin d’attendre JDK 8 en 2014 • Groovy a des closures depuis 2003 ! • C’est quoi une closure ? • bloc de code réutilisable • assignable dans une variable • qu’on peut passer en paramètre d’une méthode • pouvant prendre des arguments • y compris des valeurs par défaut
  • 43. Syntaxespécialepourlescollections def  list  =  [1,  2,  4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT'
  • 44. Syntaxespécialepourlescollections def  list  =  [1,  2,  4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT' Liste
  • 45. Syntaxespécialepourlescollections def  list  =  [1,  2,  4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT' Liste Range
  • 46. Syntaxespécialepourlescollections def  list  =  [1,  2,  4,  'a',  'b',  'c'] assert  list[3]  ==  'a' list  <<  'd' assert  list[6]  ==  'd' def  range  =  1..10 assert  range.size()  ==  10 def  map  =  [a:  1,  b:  2,  c:  3] assert  map['b']  ==  2 assert  map.b  ==  2 map['d']  =  'Mix' map.e  =  'IT' assert  [map.d,  map['e']].join('-­‐')  ==  'Mix-­‐IT' Liste Range Map
  • 47. Vousavezvule«powerassert»deGroovy? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2
  • 48. Vousavezvule«powerassert»deGroovy? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2 Assignation multiple
  • 49. Vousavezvule«powerassert»deGroovy? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2 Assertion  failed:   assert  e  ==  m  *  c  *  2              |  |    |  |  |  |              |  |    1  |  |  6E+9              |  false|  3E+9              123        3E+9 Assignation multiple
  • 50. Vousavezvule«powerassert»deGroovy? def  (e,  m,  c)  =  [123,  1,  3e9] assert  e  ==  m  *  c  *  2 Assertion  failed:   assert  e  ==  m  *  c  *  2              |  |    |  |  |  |              |  |    1  |  |  6E+9              |  false|  3E+9              123        3E+9 Toutes les valeurs des sous- expressions Assignation multiple
  • 52. Créer un projetGradle Utiliser le pluginGroovy Bon, ben... c’est parti !
  • 53.
  • 54. CréerunprojetetappliquerlepluginGroovy • Dans un nouveau répertoire projet, créer un fichier build.gradle, contenant : apply  plugin:  'groovy' repositories  {        mavenCentral() } dependencies  {        compile  'org.codehaus.groovy:groovy-­‐all:2.1.3'        testCompile                  'org.spockframework:spock-­‐core:0.7-­‐groovy-­‐2.0' }
  • 55. CréerunprojetetappliquerlepluginGroovy • Créer quelques répertoires : • src/main/groovy • src/test/groovy
  • 56. CréerunprojetetappliquerlepluginGroovy • Créer quelques répertoires : • src/main/groovy • src/test/groovy Nos fichiers source Java & Groovy
  • 57. CréerunprojetetappliquerlepluginGroovy • Créer quelques répertoires : • src/main/groovy • src/test/groovy Nos fichiers source Java & Groovy Pour découvrir le frameworkdetestSpock
  • 58. CréerunprojetetappliquerlepluginGroovy • Lister les tâches disponibles : $  gradle  tasks
  • 59.
  • 60. Pour tester et builder notre projet
  • 61. Pour tester et builder notre projet Générer la documentation
  • 62. Pour tester et builder notre projet Générer la documentation Pour lancer les tests
  • 63. Pour tester et builder notre projet Générer la documentation Pour lancer les tests Faire un peu le ménage
  • 67. Créditsimages • canon http://uponamidnightdreary.com/wp-content/uploads/2011/12/AR22442.jpg • costume http://cdn2.kebello.com/8235-thickbox/costume-3-pieces-ref-patrick.jpg • mickey http://4.bp.blogspot.com/-i9hzB7QYgq4/To9UufDo5dI/AAAAAAAAB2g/lKHHMm-KC68/s1600/f787ec3b56c3bd76_mickey-mouse.jpg • gstring http://cdnb.lystit.com/photos/2012/11/23/dg-noir-gstring-product-1-5588280-166851249_large_flex.jpeg • défilé http://www.lesreceptionstendances.com/wp-content/uploads/2012/07/organiser-un-d%C3%A9fil%C3%A9-de-mode-4.jpg • fantasia http://images.wikia.com/disney/images/d/d8/Fantasia-disneyscreencaps.com-2363.jpg • Spock http://images1.fanpop.com/images/photos/2500000/Zachary-Quinto-Spock-star-trek-2597267-2560-1921.jpg • cloture http://www.lusitane.fr/Userfiles/image/cloture-beton-pedra%20(17).JPG