SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Gearconf - Gradle Workshop
Gradle für Einsteiger
Dr. Joachim Baumann
Ausbildung	
  
1986-­‐1992
	
  
1994-­‐1999
	
  
1999-­‐2000
	
  
	
  

	
  InformaFk	
  
	
  UniversiYät	
  StuYgart	
  
	
  PromoFon	
  	
  
	
  Universität	
  StuYgart,	
  Universität	
  Genf	
  
	
  Postdoc	
  
	
  Universität	
  StuYgart	
  

Referenzen	
  (Auszug)	
  
n 

n 

Beruflicher	
  Werdegang	
  

1993  ANT	
  Bosch	
  Telecom,	
  Soware-­‐Entwickler	
  
2000  COSS	
  Sowaretechnik	
  AG,	
  Bereichsleiter	
  Produktentwicklung	
  
und	
  Forschung	
  
n 
2001  Junidas	
  GmbH,	
  Geschäsführer	
  
2005  Xinaris	
  GmbH,	
  Geschäsführer	
  
2007  Cirquent	
  GmbH,	
  Leitung	
  Competence	
  Center	
  iBPM,	
  Director	
  
Shoring	
  
2012  codecentric	
  AG,	
  Geschäsführer	
  Frankfurt	
  
n 

Schwerpunkte	
  
n 
n 
n 
n 
n 
n 

Architektur	
  großer	
  Systeme	
  
Open-­‐Source-­‐Produkte	
  
KommunikaFonsnetze,	
  Mobile	
  CompuFng,	
  Verteilte	
  Systeme,	
  
Datenbanken	
  
Training,	
  Coaching,	
  Vorträge	
  
Agile	
  Methoden	
  
Big	
  Data	
  

Nürnberger	
  Versicherungsgruppe,	
  Nürnberg	
  
p  Absatzplanungssystem	
  der	
  Nürnberger	
  Versicherung	
  
p  Technischer	
  Projektleiter	
  
p  Architekt	
  
FIDUCIA	
  IT	
  AG,	
  Karlsruhe	
  
p  Architekturberatung	
  
p  Übernahme	
  kriFscher	
  Projekte	
  
p  Qualitätssicherung	
  
p  Coaching	
  
NTT	
  DATA,	
  Tokyo	
  
p  Entwurf	
  einer	
  neuen	
  agil	
  basierten	
  Methode	
  für	
  24-­‐
Stunden	
  Entwicklung	
  
p  VerifikaFon	
  der	
  Methode	
  in	
  einem	
  von	
  3	
  
Vergleichsprojekten	
  
p  Preis	
  für	
  das	
  Projekt	
  von	
  NTT	
  DATA	
  
ArFkel,	
  Bücher,	
  Vorträge	
  
p  3	
  Bücher	
  	
  
p  Über	
  40	
  ArFkel	
  
p  Vorträge	
  auf	
  int.	
  und	
  deutschen	
  Konferenzen	
  
p  Beispiele	
  
—  „Groovy:	
  Grundlagen	
  und	
  fortgeschriYene	
  
Techniken“,	
  d.punkt	
  Verlag,	
  600	
  S.	
  
—  „Groovy:	
  Grundlagen“	
  in	
  iX-­‐Sonderhe	
  Java	
  
Kompakt	
  1/2009	
  
„Gradle:	
  Ein	
  kompakter	
  EinsFeg	
  in	
  das	
  Build-­‐
Management-­‐System“,	
  d.punkt-­‐Verlag,	
  260	
  S.	
  
codecentric auf einen Blick
Das Unternehmen codecentric AG
•  Europaweit
•  10 Standorte
•  200 Spezialisten
•  4 Bereiche
•  Beratung
•  Agile Software Factory
•  Performance Solutions
•  Meettheexperts
(Schulungen & Workshops)

Hamburg	
  
Niederlande	
  
Berlin	
  
Düsseldorf	
  
Solingen	
  
Frankfurt	
  
Karlsruhe	
  
München	
  
Schweiz	
  
Bosnien	
  und	
  
Herzegowina	
  

Serbien	
  

Datum / Unternehmensvorstellung

3	
  
Werte der Codecentric
Erwartete Funktionalität eines Build-Management-Systems
• 
• 
• 
• 
• 

• 
• 
• 
• 
• 

Übersetzung von Quelltexten
Linken der Ergebnisse
Checkout der Quelltexte aus dem Versionsverwaltungssystem (kann ausgelagert
werden)
Setzen von Tags (kann ausgelagert werden).
Ausführen verschiedener Arten von Tests. Beispiele sind:
–  Unit-Tests für einzelne Klassen
–  Modul- oder Komponententests
–  Integrationstests
–  Funktionale und nichtfunktionale Systemtests
–  Automatisierte Akzeptanztests
Detaillierte Test-Reports, die die Testergebnisse übersichtlich zusammenfassen.
Packen des Resultats (z.B. eine Jar-, War- oder Ear-Datei)
Transfer des Resultats zu den verschiedenen Testsystemen und Ausführung
entsprechender Testarten (häufig durch Build-Server übernommen).
Unterstützung für polyglotte Projekte.
Erzeugung von Dokumentation und Release Notes.
Wünsche an ein Build-Management-System
• 
• 
• 
• 

• 
• 
• 
• 
• 

Explizite Unterstützung des Workflows, der durch das Build- ManagementSystem implementiert wird.
Leichte Anpass- und Erweiterbarkeit des Workflows, um sich an lokale
Vorgehensmodelle anpassen zu können.
Leichte Lesbarkeit und selbsterklärende Notation der Sprache des Build-Skripts.
Verwendung von Konventionen, um vernünftige Vorgabewerte für die
verschiedenen Schritte des Workflows zu haben (wie zum Bei-spiel die Orte, an
denen sich die Quelltexte befinden).
Leichte Änderbarkeit der Vorgabewerte für die Anpassung an die lokale
Umgebung.
Inkrementeller Build, der erkennt, welche Artefakte schon erzeugt sind.
Parallelisierung von unabhängig ausführbaren Schritten des Workflows, um die
Wartezeit so kurz wie möglich zu halten.
Zugriff auf alle Artefakte, die durch den Build erzeugt wurden.
Status-Reports, die den aktuellen Zustand des Builds zusammenfassen.
Gradle für Einsteiger
• 

Wichtig: Selbermachen, nicht zuschauen

• 

Installation

• 

Grundlagen

• 

Konfigurations- und Ausführungsphase

• 

Kurzüberblick Groovy

• 

Plug-ins - Grundlagen

• 

Ein
– 
– 
– 
– 
– 

• 

Veröffentlichung der Artefakte

Projekt
Verzeichnisstruktur
Abhängigkeiten
Manipulation der Jar-Datei
Tests
Qualitätssicherung
Grundlagen von Gradle
• 

Gradle verwendet Build-Skripte, die build.gradle heißen

• 

Jedes Build-Skript ist ein Groovy-Skript

• 

Zwei sehr wichtige Prinzipien
–  Convention over Configuration
–  Don’t Repeat Yourself

• 

Gradle erzeugt ein dynamisches Modell des Workflows in Form eines DAG

• 

Alles ist änderbar

tset

tseTelipmoc

dliub

elipmoc
elbmessa
Installation
• 

Herunterladen von Java
www.javasoft.com

• 

Herunterladen von Gradle
www.gradle.org

• 

Optional Groovy
groovy.codehaus.org

• 
• 
• 
• 
• 

Installation unter Windows: Verzeichnis Program FilesGradlegradle-1.8
Installation unter OS X: /Library/Gradle/gradle-1.8
Installation unter Linux: /usr/local/Gradle/gradle-1.8
Symbolischen Link setzen
Pfad setzen

• 
• 

Texteditor
Shell

• 

Falls noch viele herunterladen müssen, dann über USB-Stick
Konfigurationsphase
• 
• 
• 
• 

Es wird das Gradle-Build-Skript ausgeführt
Die Groovy- und DSL-Befehle konfigurieren das Objektgeflecht
Das Projekt-Objekt ist die Wurzel des Geflechts
–  Wird direkt zur Verfügung gestellt
Erzeugen neuer Tasks, die ausgeführt werden können

• 

Erstes Skript in der Datei build.gradle
println "Hallo aus der Konfigurationsphase"
Ausführungsphase
• 

Führt alle aufgerufenen Tasks aus (normalerweise Kommandozeile)

• 

Vorher werden alle Tasks ausgeführt, von denen dieser abhängig ist

• 

Hierfür wird der DAG ausgewertet, um die Abhängigkeiten zu bestimmen
Definition eines Tasks
• 

Erhält eine Konfigurations-Closure (optional) als Argument, alternativ direkte
Argumente

• 
• 

Mit << (left-shift) können Aktionen an die Liste der Aktionen angehängt werden
Äquivalent zu doLast()

• 

Einfügen am Anfang der Liste mit doFirst()
task halloTask
halloTask.doLast { print "aus der " }
halloTask << { println "Ausführungsphase" }
halloTask.doFirst { print "Hallo " }
task postHallo (dependsOn: halloTask) << {
println “Ende”
}
Kurzüberblick Groovy
• 

Vereinfachte Java-Syntax
–  Semikolon optional
–  Gstring
–  Grundsätzliche Verwendung von Objekten
–  Abkürzungen wie “println”

• 

Skripte

• 

Operatorüberladung
–  Vorgegebene
•  Beispiel <<
•  Operator für sichere Navigation a.?b
–  Eigene möglich

• 

Benannte Parameter

• 

Closures

• 

Collection-Iteratoren
Plug-ins - Grundlagen
• 

Plug-ins kapseln Funktionalität

• 

Können in beliebigen VM-Sprachen geschrieben sein
–  Gute Wahl ist Groovy

• 

Möglichkeiten
–  Mitgelieferte Plug-ins
–  Plug-ins, die über URLs geladen werden (nicht zu empfehlen)
–  Plug-ins, die über Repositories geladen werden
–  Plug-ins, die selbst geschrieben sind (meist im Verzeichnis buildSrc)

• 
• 
• 

Erweitern Objekte
Stellen neue Objekte zur Verfügung
Konfigurieren existierende Objekte

• 

Werden geladen über den Befehl apply plugin
apply plugin: ‘java’
Ein einfaches Projekt
• 

Wir benutzen das Java-Plug-in

• 

Default-Pfade des Java-Plug-ins (angelehnt an Maven)
Klasse HelloWorld

package de.gradleworkshop;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
HelloWorld hw = new HelloWorld();
for(String greeting : hw.generateGreetingsData())
System.out.println(greeting);
}
public List<String> generateGreetingsData() {
List <String> greetings = new ArrayList <String>();
greetings.add("Hallo Welt");
return greetings;
}
}
Manipulation des Manifests
• 

Jede Jar-Datei enthält eine Datei MANIFEST.MF (siehe build/tmp)

• 

Diese kann verändert werden

• 

Enthält unter anderem eine Startklasse für das Jar-Archiv

jar {
manifest {
attributes 'Main-Class': 'de.gradleworkshop.HelloWorld'
}
}
• 

Alternativ
jar.manifest.attributes 'Main-Class': 'de.gradleworkshop.HelloWorld'
Tests
• 

Platzieren der Testklassen in das richtige Verzeichnis sorgt für automatisches Übersetzen

package de.gradleworkshop;
import java.util.List;
import org.junit.*;
import static org.junit.Assert.*;
public class HelloWorldTest {
HelloWorld oUT;
@Before
public void setUp() {
oUT = new HelloWorld();
}
@Test
public void testGenerateGreetingsData() {
List<String> res = oUT.generateGreetingsData();
assertEquals("result contains wrong number of results", 1, res.size());
}
}
Konfigurationen und Abhängigkeiten
• 

Gradle bietet Konfigurationsobjekte
–  Bieten Abhängigkeitsinformationen
–  Pfade zu Quellen und zu Zielen
–  Zugehörige Artefakte
–  Weitere Konfigurationsinformationen

• 

Tasks hängen von Konfigurationen ab

• 

Beispiele
–  compile, testCompile, runtime, testRuntime

• 
• 

Abhängigkeiten werden über ein Schlüsselwort dependencies definiert
Maventypische Notation
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.+’
}
Anbindung von Repositories
• 

Repositories stellen die Jar-Archive zur Verfügung

• 

Es lassen sich Ivy- und Maven-Repositories anbinden, öffentlich und privat

• 

Spezielle Repositories
–  Maven Central
–  Lokales Maven Repository (~/.m2/repository)

• 

Verwendund des Schlüsselworts repositories
repositories {
mavenLocal()
}
repositories {
mavenCentral()
}

• 

Es können mehrere Repositories definiert werden
Weitere Plug-ins
• 

Das Application-Plug-in
–  Erzeugt Start-Skripte, die mit dem Task run verwendet werden können
–  Ein Zip-Archiv mit dem Task distZip
–  Setzen der Hauptklasse über
mainClassName = "de.gradleworkshop.HelloWorld"
–  Verwendung mit apply plugin: 'application'
Verwendung von TestNG
• 

Sehr einfach

dependencies {
testCompile group: 'org.testng', name: 'testng', version: '6.+'
}
test {
useTestNG()
}
Testklasse für TestNG
package de.gradleworkshop;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.testng.AssertJUnit.*;
import org.testng.annotations.*;
public class TestHelloWorld {
HelloWorld oUT;
@BeforeTest
public void setUp() {
oUT = new HelloWorld();
}
@Test
public void testGenerateGreetingsData() {
List<String> res = oUT.generateGreetingsData();
assertEquals("Falsche Anzahl Einträge", 1, res.size());
}
}
Qualitätssicherung
• 

Unterstützung für PMD, Checkstyle, Findbugs, Emma, Sonar

• 

Beispiel für PMD
apply plugin: 'pmd'
pmdMain {
ruleSets = [ "basic", "strings" ]
ignoreFailures = true
}

• 

Weiteres Beispiel unter Verwendung von withType()
tasks.withType(Pmd) {
ruleSets = [ "basic", "strings" ]
ignoreFailures = true
ruleSetFiles = files('config/pmd/rulesets.xml')
reports {
xml.enabled false
html.enabled true
}
}
Veröffentlichung der Artefakte
• 

Gradle definiert für jede Konfiguration einen Task upload<Konfiguration>
–  Baut und veröffentlicht die zur Konfiguration gehörenden Artefakte

• 

Das Java-Plug-in erzeugt eine Konfiguration archives, die sämtliche im Task jar
erzeugten Artefakte enthält.
–  uploadArchives kann also für die Veröffentlichung verwendet werden

• 

Verwendung des Maven-Plug-ins mit apply plugin: ‘maven’
–  Absichtlich keine Verwendung des “normalen” Repositories
apply plugin: ‘maven’
version = '0.1-SNAPSHOT’
group = 'de.gradleworkshop’
uploadArchives {
repositories {
flatDir { dirs "repo" }
mavenDeployer { repository (url : "file:///gradleWS/myRepo/") }
} }
Zusammenfassung
• 

Wir haben Gradle programmiert und
– 
– 
– 
– 
– 

Eine Applikation gebaut
Die Tests für die Applikation gemacht
Ein alternatives Test-Framework eingesetzt
Die Qualität gesichert
In ein lokales Repository hochgeladen

• 
• 

Damit können Sie jetzt normale Projekte problemlos mit Gradle bauen
Migration von anderen Build-Systemen zu Gradle ist einfach

• 

Gradle
–  ist einfach
–  It leicht verständlich
–  hat vernünftige Vorgaben
–  kann leicht angepasst werden
Fragen?

Dr. Joachim Baumann
codecentric AG
An der Welle 4
60322 Frankfurt
Joachim.Baumann@codecentric.de
www.codecentric.de
blog.codecentric.de

Datum/ Fragen

27	
  

Weitere ähnliche Inhalte

Was ist angesagt?

Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
inovex GmbH
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
Frank Schmittlein
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
René Winkelmeyer
 
How to test your JavaScript - TDD and BDD possible
How to test your JavaScript - TDD and BDD possibleHow to test your JavaScript - TDD and BDD possible
How to test your JavaScript - TDD and BDD possible
Felix Müller
 

Was ist angesagt? (20)

Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
 
Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
Continuous Delivery - Development Tool Chain - Virtualisierung, Packer, Vagra...
 
Eine Stunde was mit Api First!
Eine Stunde was mit Api First!Eine Stunde was mit Api First!
Eine Stunde was mit Api First!
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbHDocker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
Docker Workshop Experten Forum Stuttgart 2015, Agile Methoden GmbH
 
DDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale EntwicklungsumgebungDDEV - Eine lokale Entwicklungsumgebung
DDEV - Eine lokale Entwicklungsumgebung
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer InfrastrukturContinuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
Continuous Delivery für Cloud-native Anwendungen auf Cloud-nativer Infrastruktur
 
Welches Webframework passt zu mir? (WJAX)
Welches Webframework passt zu mir? (WJAX)Welches Webframework passt zu mir? (WJAX)
Welches Webframework passt zu mir? (WJAX)
 
Legacy Code refaktorisieren
Legacy Code refaktorisierenLegacy Code refaktorisieren
Legacy Code refaktorisieren
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Deploy Magento Shops with Capistrano v3
Deploy Magento Shops with Capistrano  v3Deploy Magento Shops with Capistrano  v3
Deploy Magento Shops with Capistrano v3
 
How to test your JavaScript - TDD and BDD possible
How to test your JavaScript - TDD and BDD possibleHow to test your JavaScript - TDD and BDD possible
How to test your JavaScript - TDD and BDD possible
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführung
 

Andere mochten auch

BootsFaces and AngularFaces - Modern HTML5 for JSF developers
BootsFaces and AngularFaces - Modern HTML5 for JSF developers BootsFaces and AngularFaces - Modern HTML5 for JSF developers
BootsFaces and AngularFaces - Modern HTML5 for JSF developers
OPITZ CONSULTING Deutschland
 
FELIZ 2013!!!!!!!!!!!!!!
FELIZ 2013!!!!!!!!!!!!!!FELIZ 2013!!!!!!!!!!!!!!
FELIZ 2013!!!!!!!!!!!!!!
CelesteUepc1
 

Andere mochten auch (13)

BootsFaces and AngularFaces - Modern HTML5 for JSF developers
BootsFaces and AngularFaces - Modern HTML5 for JSF developers BootsFaces and AngularFaces - Modern HTML5 for JSF developers
BootsFaces and AngularFaces - Modern HTML5 for JSF developers
 
Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)Gradle For Beginners (Serbian Developer Conference 2013 english)
Gradle For Beginners (Serbian Developer Conference 2013 english)
 
Viral marketing
Viral marketingViral marketing
Viral marketing
 
Accion tutorial en un centro de justicia juvenil
Accion tutorial en un centro de justicia juvenilAccion tutorial en un centro de justicia juvenil
Accion tutorial en un centro de justicia juvenil
 
Hotel Lindenhof****s Sommerprospekt 2014
Hotel Lindenhof****s Sommerprospekt 2014Hotel Lindenhof****s Sommerprospekt 2014
Hotel Lindenhof****s Sommerprospekt 2014
 
FELIZ 2013!!!!!!!!!!!!!!
FELIZ 2013!!!!!!!!!!!!!!FELIZ 2013!!!!!!!!!!!!!!
FELIZ 2013!!!!!!!!!!!!!!
 
Rettungsgasse neu
Rettungsgasse neu Rettungsgasse neu
Rettungsgasse neu
 
PresentacióN2 Dia De La Pau
PresentacióN2 Dia De La PauPresentacióN2 Dia De La Pau
PresentacióN2 Dia De La Pau
 
Procedimiento para elaboración de sitio web
Procedimiento para elaboración de sitio webProcedimiento para elaboración de sitio web
Procedimiento para elaboración de sitio web
 
Tertulia Radio Innovación
Tertulia Radio InnovaciónTertulia Radio Innovación
Tertulia Radio Innovación
 
PresentacióN Oid Mortales
PresentacióN Oid MortalesPresentacióN Oid Mortales
PresentacióN Oid Mortales
 
GETAFE CIUDAD LECTORA Y ESCRITORA
GETAFE CIUDAD LECTORA Y ESCRITORAGETAFE CIUDAD LECTORA Y ESCRITORA
GETAFE CIUDAD LECTORA Y ESCRITORA
 
Recruiting Studie 2012
Recruiting Studie 2012Recruiting Studie 2012
Recruiting Studie 2012
 

Ähnlich wie Gradle - Beginner's Workshop (german)

Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 

Ähnlich wie Gradle - Beginner's Workshop (german) (20)

Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
DWX 2017 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch m...
 
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application VirtualizationDesktop Containers 12: Next Generation of ZENworks Application Virtualization
Desktop Containers 12: Next Generation of ZENworks Application Virtualization
 
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
BASTA 2016 - Alternativen zu Visual-Studio-Testtools: Wann lohnt es sich auch...
 
Scala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) SpaceScala - OSGi Bundles from Outer (Java) Space
Scala - OSGi Bundles from Outer (Java) Space
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
Durchgestartet? Eine Einführung in die Google App Engine / Java - Reloaded!
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Softwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha NightSoftwerkskammer Chemnitz Special Pecha Kucha Night
Softwerkskammer Chemnitz Special Pecha Kucha Night
 
Vagrant
VagrantVagrant
Vagrant
 
DevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCampDevOps der Triple-E Klasse - Eclipse DemoCamp
DevOps der Triple-E Klasse - Eclipse DemoCamp
 
TDD für Testmuffel
TDD für TestmuffelTDD für Testmuffel
TDD für Testmuffel
 
CDI
CDICDI
CDI
 
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DBDocker-Images mit vorinstallierter Instanz einer Oracle-DB
Docker-Images mit vorinstallierter Instanz einer Oracle-DB
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 

Mehr von Joachim Baumann

Mehr von Joachim Baumann (7)

Multi speed IT
Multi speed ITMulti speed IT
Multi speed IT
 
Erfahrungen mit agilen Festpreisen
Erfahrungen mit agilen FestpreisenErfahrungen mit agilen Festpreisen
Erfahrungen mit agilen Festpreisen
 
"Agilität, Unternehmen und Menschen." Eröffnungs-Keynote der "Embedded Meets ...
"Agilität, Unternehmen und Menschen." Eröffnungs-Keynote der "Embedded Meets ..."Agilität, Unternehmen und Menschen." Eröffnungs-Keynote der "Embedded Meets ...
"Agilität, Unternehmen und Menschen." Eröffnungs-Keynote der "Embedded Meets ...
 
Eröffnungs-Keynote der Manage Agile 2014
Eröffnungs-Keynote der Manage Agile 2014Eröffnungs-Keynote der Manage Agile 2014
Eröffnungs-Keynote der Manage Agile 2014
 
Integration agiler und klassischer Vorgehensweisen (Embedded-Meets-Agile 18.2...
Integration agiler und klassischer Vorgehensweisen (Embedded-Meets-Agile 18.2...Integration agiler und klassischer Vorgehensweisen (Embedded-Meets-Agile 18.2...
Integration agiler und klassischer Vorgehensweisen (Embedded-Meets-Agile 18.2...
 
Introduction to Groovy (Serbian Developer Conference 2013)
Introduction to Groovy (Serbian Developer Conference 2013)Introduction to Groovy (Serbian Developer Conference 2013)
Introduction to Groovy (Serbian Developer Conference 2013)
 
Warum agile Organisationen?
Warum agile Organisationen?Warum agile Organisationen?
Warum agile Organisationen?
 

Gradle - Beginner's Workshop (german)

  • 1. Gearconf - Gradle Workshop Gradle für Einsteiger
  • 2. Dr. Joachim Baumann Ausbildung   1986-­‐1992   1994-­‐1999   1999-­‐2000      InformaFk    UniversiYät  StuYgart    PromoFon      Universität  StuYgart,  Universität  Genf    Postdoc    Universität  StuYgart   Referenzen  (Auszug)   n  n  Beruflicher  Werdegang   1993  ANT  Bosch  Telecom,  Soware-­‐Entwickler   2000  COSS  Sowaretechnik  AG,  Bereichsleiter  Produktentwicklung   und  Forschung   n  2001  Junidas  GmbH,  Geschäsführer   2005  Xinaris  GmbH,  Geschäsführer   2007  Cirquent  GmbH,  Leitung  Competence  Center  iBPM,  Director   Shoring   2012  codecentric  AG,  Geschäsführer  Frankfurt   n  Schwerpunkte   n  n  n  n  n  n  Architektur  großer  Systeme   Open-­‐Source-­‐Produkte   KommunikaFonsnetze,  Mobile  CompuFng,  Verteilte  Systeme,   Datenbanken   Training,  Coaching,  Vorträge   Agile  Methoden   Big  Data   Nürnberger  Versicherungsgruppe,  Nürnberg   p  Absatzplanungssystem  der  Nürnberger  Versicherung   p  Technischer  Projektleiter   p  Architekt   FIDUCIA  IT  AG,  Karlsruhe   p  Architekturberatung   p  Übernahme  kriFscher  Projekte   p  Qualitätssicherung   p  Coaching   NTT  DATA,  Tokyo   p  Entwurf  einer  neuen  agil  basierten  Methode  für  24-­‐ Stunden  Entwicklung   p  VerifikaFon  der  Methode  in  einem  von  3   Vergleichsprojekten   p  Preis  für  das  Projekt  von  NTT  DATA   ArFkel,  Bücher,  Vorträge   p  3  Bücher     p  Über  40  ArFkel   p  Vorträge  auf  int.  und  deutschen  Konferenzen   p  Beispiele   —  „Groovy:  Grundlagen  und  fortgeschriYene   Techniken“,  d.punkt  Verlag,  600  S.   —  „Groovy:  Grundlagen“  in  iX-­‐Sonderhe  Java   Kompakt  1/2009   „Gradle:  Ein  kompakter  EinsFeg  in  das  Build-­‐ Management-­‐System“,  d.punkt-­‐Verlag,  260  S.  
  • 3. codecentric auf einen Blick Das Unternehmen codecentric AG •  Europaweit •  10 Standorte •  200 Spezialisten •  4 Bereiche •  Beratung •  Agile Software Factory •  Performance Solutions •  Meettheexperts (Schulungen & Workshops) Hamburg   Niederlande   Berlin   Düsseldorf   Solingen   Frankfurt   Karlsruhe   München   Schweiz   Bosnien  und   Herzegowina   Serbien   Datum / Unternehmensvorstellung 3  
  • 5. Erwartete Funktionalität eines Build-Management-Systems •  •  •  •  •  •  •  •  •  •  Übersetzung von Quelltexten Linken der Ergebnisse Checkout der Quelltexte aus dem Versionsverwaltungssystem (kann ausgelagert werden) Setzen von Tags (kann ausgelagert werden). Ausführen verschiedener Arten von Tests. Beispiele sind: –  Unit-Tests für einzelne Klassen –  Modul- oder Komponententests –  Integrationstests –  Funktionale und nichtfunktionale Systemtests –  Automatisierte Akzeptanztests Detaillierte Test-Reports, die die Testergebnisse übersichtlich zusammenfassen. Packen des Resultats (z.B. eine Jar-, War- oder Ear-Datei) Transfer des Resultats zu den verschiedenen Testsystemen und Ausführung entsprechender Testarten (häufig durch Build-Server übernommen). Unterstützung für polyglotte Projekte. Erzeugung von Dokumentation und Release Notes.
  • 6. Wünsche an ein Build-Management-System •  •  •  •  •  •  •  •  •  Explizite Unterstützung des Workflows, der durch das Build- ManagementSystem implementiert wird. Leichte Anpass- und Erweiterbarkeit des Workflows, um sich an lokale Vorgehensmodelle anpassen zu können. Leichte Lesbarkeit und selbsterklärende Notation der Sprache des Build-Skripts. Verwendung von Konventionen, um vernünftige Vorgabewerte für die verschiedenen Schritte des Workflows zu haben (wie zum Bei-spiel die Orte, an denen sich die Quelltexte befinden). Leichte Änderbarkeit der Vorgabewerte für die Anpassung an die lokale Umgebung. Inkrementeller Build, der erkennt, welche Artefakte schon erzeugt sind. Parallelisierung von unabhängig ausführbaren Schritten des Workflows, um die Wartezeit so kurz wie möglich zu halten. Zugriff auf alle Artefakte, die durch den Build erzeugt wurden. Status-Reports, die den aktuellen Zustand des Builds zusammenfassen.
  • 7. Gradle für Einsteiger •  Wichtig: Selbermachen, nicht zuschauen •  Installation •  Grundlagen •  Konfigurations- und Ausführungsphase •  Kurzüberblick Groovy •  Plug-ins - Grundlagen •  Ein –  –  –  –  –  •  Veröffentlichung der Artefakte Projekt Verzeichnisstruktur Abhängigkeiten Manipulation der Jar-Datei Tests Qualitätssicherung
  • 8. Grundlagen von Gradle •  Gradle verwendet Build-Skripte, die build.gradle heißen •  Jedes Build-Skript ist ein Groovy-Skript •  Zwei sehr wichtige Prinzipien –  Convention over Configuration –  Don’t Repeat Yourself •  Gradle erzeugt ein dynamisches Modell des Workflows in Form eines DAG •  Alles ist änderbar tset tseTelipmoc dliub elipmoc elbmessa
  • 9. Installation •  Herunterladen von Java www.javasoft.com •  Herunterladen von Gradle www.gradle.org •  Optional Groovy groovy.codehaus.org •  •  •  •  •  Installation unter Windows: Verzeichnis Program FilesGradlegradle-1.8 Installation unter OS X: /Library/Gradle/gradle-1.8 Installation unter Linux: /usr/local/Gradle/gradle-1.8 Symbolischen Link setzen Pfad setzen •  •  Texteditor Shell •  Falls noch viele herunterladen müssen, dann über USB-Stick
  • 10. Konfigurationsphase •  •  •  •  Es wird das Gradle-Build-Skript ausgeführt Die Groovy- und DSL-Befehle konfigurieren das Objektgeflecht Das Projekt-Objekt ist die Wurzel des Geflechts –  Wird direkt zur Verfügung gestellt Erzeugen neuer Tasks, die ausgeführt werden können •  Erstes Skript in der Datei build.gradle println "Hallo aus der Konfigurationsphase"
  • 11. Ausführungsphase •  Führt alle aufgerufenen Tasks aus (normalerweise Kommandozeile) •  Vorher werden alle Tasks ausgeführt, von denen dieser abhängig ist •  Hierfür wird der DAG ausgewertet, um die Abhängigkeiten zu bestimmen
  • 12. Definition eines Tasks •  Erhält eine Konfigurations-Closure (optional) als Argument, alternativ direkte Argumente •  •  Mit << (left-shift) können Aktionen an die Liste der Aktionen angehängt werden Äquivalent zu doLast() •  Einfügen am Anfang der Liste mit doFirst() task halloTask halloTask.doLast { print "aus der " } halloTask << { println "Ausführungsphase" } halloTask.doFirst { print "Hallo " } task postHallo (dependsOn: halloTask) << { println “Ende” }
  • 13. Kurzüberblick Groovy •  Vereinfachte Java-Syntax –  Semikolon optional –  Gstring –  Grundsätzliche Verwendung von Objekten –  Abkürzungen wie “println” •  Skripte •  Operatorüberladung –  Vorgegebene •  Beispiel << •  Operator für sichere Navigation a.?b –  Eigene möglich •  Benannte Parameter •  Closures •  Collection-Iteratoren
  • 14. Plug-ins - Grundlagen •  Plug-ins kapseln Funktionalität •  Können in beliebigen VM-Sprachen geschrieben sein –  Gute Wahl ist Groovy •  Möglichkeiten –  Mitgelieferte Plug-ins –  Plug-ins, die über URLs geladen werden (nicht zu empfehlen) –  Plug-ins, die über Repositories geladen werden –  Plug-ins, die selbst geschrieben sind (meist im Verzeichnis buildSrc) •  •  •  Erweitern Objekte Stellen neue Objekte zur Verfügung Konfigurieren existierende Objekte •  Werden geladen über den Befehl apply plugin apply plugin: ‘java’
  • 15. Ein einfaches Projekt •  Wir benutzen das Java-Plug-in •  Default-Pfade des Java-Plug-ins (angelehnt an Maven)
  • 16. Klasse HelloWorld package de.gradleworkshop; import java.util.ArrayList; import java.util.List; public class HelloWorld { public static void main(String[] args) { HelloWorld hw = new HelloWorld(); for(String greeting : hw.generateGreetingsData()) System.out.println(greeting); } public List<String> generateGreetingsData() { List <String> greetings = new ArrayList <String>(); greetings.add("Hallo Welt"); return greetings; } }
  • 17. Manipulation des Manifests •  Jede Jar-Datei enthält eine Datei MANIFEST.MF (siehe build/tmp) •  Diese kann verändert werden •  Enthält unter anderem eine Startklasse für das Jar-Archiv jar { manifest { attributes 'Main-Class': 'de.gradleworkshop.HelloWorld' } } •  Alternativ jar.manifest.attributes 'Main-Class': 'de.gradleworkshop.HelloWorld'
  • 18. Tests •  Platzieren der Testklassen in das richtige Verzeichnis sorgt für automatisches Übersetzen package de.gradleworkshop; import java.util.List; import org.junit.*; import static org.junit.Assert.*; public class HelloWorldTest { HelloWorld oUT; @Before public void setUp() { oUT = new HelloWorld(); } @Test public void testGenerateGreetingsData() { List<String> res = oUT.generateGreetingsData(); assertEquals("result contains wrong number of results", 1, res.size()); } }
  • 19. Konfigurationen und Abhängigkeiten •  Gradle bietet Konfigurationsobjekte –  Bieten Abhängigkeitsinformationen –  Pfade zu Quellen und zu Zielen –  Zugehörige Artefakte –  Weitere Konfigurationsinformationen •  Tasks hängen von Konfigurationen ab •  Beispiele –  compile, testCompile, runtime, testRuntime •  •  Abhängigkeiten werden über ein Schlüsselwort dependencies definiert Maventypische Notation dependencies { testCompile group: 'junit', name: 'junit', version: '4.+’ }
  • 20. Anbindung von Repositories •  Repositories stellen die Jar-Archive zur Verfügung •  Es lassen sich Ivy- und Maven-Repositories anbinden, öffentlich und privat •  Spezielle Repositories –  Maven Central –  Lokales Maven Repository (~/.m2/repository) •  Verwendund des Schlüsselworts repositories repositories { mavenLocal() } repositories { mavenCentral() } •  Es können mehrere Repositories definiert werden
  • 21. Weitere Plug-ins •  Das Application-Plug-in –  Erzeugt Start-Skripte, die mit dem Task run verwendet werden können –  Ein Zip-Archiv mit dem Task distZip –  Setzen der Hauptklasse über mainClassName = "de.gradleworkshop.HelloWorld" –  Verwendung mit apply plugin: 'application'
  • 22. Verwendung von TestNG •  Sehr einfach dependencies { testCompile group: 'org.testng', name: 'testng', version: '6.+' } test { useTestNG() }
  • 23. Testklasse für TestNG package de.gradleworkshop; import java.util.List; import static org.junit.Assert.assertEquals; import static org.testng.AssertJUnit.*; import org.testng.annotations.*; public class TestHelloWorld { HelloWorld oUT; @BeforeTest public void setUp() { oUT = new HelloWorld(); } @Test public void testGenerateGreetingsData() { List<String> res = oUT.generateGreetingsData(); assertEquals("Falsche Anzahl Einträge", 1, res.size()); } }
  • 24. Qualitätssicherung •  Unterstützung für PMD, Checkstyle, Findbugs, Emma, Sonar •  Beispiel für PMD apply plugin: 'pmd' pmdMain { ruleSets = [ "basic", "strings" ] ignoreFailures = true } •  Weiteres Beispiel unter Verwendung von withType() tasks.withType(Pmd) { ruleSets = [ "basic", "strings" ] ignoreFailures = true ruleSetFiles = files('config/pmd/rulesets.xml') reports { xml.enabled false html.enabled true } }
  • 25. Veröffentlichung der Artefakte •  Gradle definiert für jede Konfiguration einen Task upload<Konfiguration> –  Baut und veröffentlicht die zur Konfiguration gehörenden Artefakte •  Das Java-Plug-in erzeugt eine Konfiguration archives, die sämtliche im Task jar erzeugten Artefakte enthält. –  uploadArchives kann also für die Veröffentlichung verwendet werden •  Verwendung des Maven-Plug-ins mit apply plugin: ‘maven’ –  Absichtlich keine Verwendung des “normalen” Repositories apply plugin: ‘maven’ version = '0.1-SNAPSHOT’ group = 'de.gradleworkshop’ uploadArchives { repositories { flatDir { dirs "repo" } mavenDeployer { repository (url : "file:///gradleWS/myRepo/") } } }
  • 26. Zusammenfassung •  Wir haben Gradle programmiert und –  –  –  –  –  Eine Applikation gebaut Die Tests für die Applikation gemacht Ein alternatives Test-Framework eingesetzt Die Qualität gesichert In ein lokales Repository hochgeladen •  •  Damit können Sie jetzt normale Projekte problemlos mit Gradle bauen Migration von anderen Build-Systemen zu Gradle ist einfach •  Gradle –  ist einfach –  It leicht verständlich –  hat vernünftige Vorgaben –  kann leicht angepasst werden
  • 27. Fragen? Dr. Joachim Baumann codecentric AG An der Welle 4 60322 Frankfurt Joachim.Baumann@codecentric.de www.codecentric.de blog.codecentric.de Datum/ Fragen 27