Builddreikampf: Ant, Maven und 2012-07-06آ  Builddreikampf: Ant, Maven und Gradle | Carl Anders Dأ¼vel

  • View
    0

  • Download
    0

Embed Size (px)

Text of Builddreikampf: Ant, Maven und 2012-07-06آ  Builddreikampf: Ant, Maven und Gradle | Carl Anders...

  • Sven Bunge / Carl Düvel

    holisticon AG

    Builddreikampf: Ant, Maven und Gradle

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 2

    1. Die Regeln

    2. Vorstellung der Kandidaten

    3. Ring frei – die Disziplinen! 1. Dependency Management

    2. Multiprojektsupport

    3. IDE-Support

    4. Support

    5. Lizenz

    6. Performance

    4. Migrationspfade

    5. Hilfestellung zur Toolwahl

    Wettkampfplan

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 3

    Die Grundregeln

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 4

    Anforderung an das Build-System

    ■ Sourcecode bauen und packen

    ■ Testen ■ Automatische Ausführen von Tests

    ■ Von Unit bis zu Akzeptanz-Tests

    ■ Codeanalyse

    ■ Dokumentation ■ JavaDoc

    ■ SourceCode

    ■ Komplette Projekt-Dokumentation

    ■ Dependency-Management

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 5

    Weitere Anforderung an das Build-System

    ■ Verteilung der erzeugten Artefakte

    ■ Konfigurations-Management ■ Programme releasen

    ■ Programm-Versionen sauber verwalten

    ■ Rollout auf Systeme

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 6

    Zusammengefasste Anforderungen

    Automatisierung

    • Code-Übersetzung wiederkehrender Prozess

    • Computer sind dazu da Dinge zu automatisieren

    Wenig menschl. Interaktion

    • Jeder kann Prozess schnell lernen

    • Weniger Fehler

    Geschwindigkeit

    • Geschwindigkeitsgewinn durch Automatisierung

    • Verlagerung auf andere Rechner möglich

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 7

    Gewinner?

    Gradle – der

    Newcomer

    Maven – der große

    Rivale

    Ant – der Altmeister

    2. Die Kandidaten

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 8

    Ant – der Altmeister

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 9

    Ant – der Altmeister

    all: hello

    hello: main.o factorial.o hello.o

    g++ main.o factorial.o hello.o -o hello

    main.o: main.cpp

    g++ -c main.cpp

    factorial.o: factorial.cpp

    g++ -c factorial.cpp

    hello.o: hello.cpp

    g++ -c hello.cpp

    clean:

    rm -rf *o hello

    Der Urvater: make

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 10

    Ant – der Altmeister

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 11

    Maven – der große Rivale

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 12

    ■ Deklarativer Ansatz

    ■ Feste Lifecycle für Aufräumen, Bauen und Dokumentation

    ■ Funktionalität wird durch Plugins bereitgestellt ■ Plugins werden an Phasen im Lifecycle gebunden

    ■ Plugins auch für Release- und Dokumentations-Prozesse

    ■ Convention over Configuration ■ Vorgaben für alle Details eines Builds: Verzeichnisse, Ablauf, Distribution

    ■ Nur wer von Vorgaben abweichen möchte, muss die Konfiguration anpassen.

    ■ Dependency-Management ■ Auch Maven-Plugins sind Abhängigkeiten

    Maven – Es gibt nur einen Weg!

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 13

    Maven - Default-Lifecycle

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 14

    ■ Nur eine XML-Datei pro Projekt: pom.xml

    ■ Keine Möglichkeit von XML-Importen

    ■ Einstellungen werden vom Eltern-Projekt übernommen

    Maven-Konfiguration

    4.0.0

    de.holisticon.builddreikampf

    MavenTest

    1.0

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 15

    Gradle – der Newcomer

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 16

    ■ Imperativer Ansatz ■ Ant-Targets == Gradle-Tasks

    ■ Groovy-DSL statt XML

    ■ Standard-Plugins für den deklarativen Ansatz ■ Definiert feste Tasks im Build-Lifecycle

    ■ Tasks über Closures erweiterbar

    ■ Ant & Ivy unter der Haube

    Gradle – Das beste aus beiden Welten?

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 17

    ■ Einfachste build.gradle:

    ■ Zusätzliche Tasks („gradle tasks“)

    ■ Aufruf mit „gradle “

    Gradle – Simple an simple Ziele

    apply plugin: 'java'

    assemble - Assembles all Jar, War, Zip, and Tar archives. build - Assembles and tests this project. buildDependents - Assembles and tests this project and all projects that depend on it. buildNeeded - Assembles and tests this project and all projects it depends on. classes - Assembles the main classes. clean - Deletes the build directory. jar - Assembles a jar archive containing the main classes. testClasses - Assembles the test classes.

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 18

    ■ Kleine Erweiterungen von Plugins

    Gradle – Fremde Tasks gefügig machen

    apply plugin: 'java'

    build.doFirst {

    println "Ich werde nun bauen!!!"

    }

    build.doLast {

    println "Bob hat fertig gebaut!"

    }

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 19

    ■ Ant-Build: build.xml

    ■ Gradle: build.gradle

    Gradles Verbündeter: Ant

    ant.importBuild 'build.xml'

    task sayHello(dependsOn: AntHello)

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 20

    ■ Aufruf „gradle tasks –all“

    ■ Aufruf „gradle sayHello“

    Gradles Verbündeter: Ant – Teil 2

    :AntHello

    [ant:echo] I'm ant

    :sayHello

    Ich bin Gradle!

    [ant:echo] Aber ich hab den Ant in mir!

    Other tasks

    -----------

    sayHello

    AntHello

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 21

    Dependency- Management

    Multi- Module- Support

    IDE-Support

    Support

    Lizenz

    Performance

    3. Ring frei!

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 22

    Dependency-Management

    Classpathkonfiguration Fest vorgegeben Einstellbar Einstellbar (+Plugins)

    Mapping transitiver Abhängigkeiten

    Automatisch Einstellbar Einstellbar

    Versionierungsschema Fest vorgegeben Konfigurierbar Konfigurierbar

    Bezugsquellen Repository flexibel flexibel

    Ausschluss transitiver Abhängigkeiten

    Einzeln Global Global

    Bezug von Maven Abhängigkeiten

    Ja Weitgehend Weitgehend

    Bezug von Ivy Abhängigkeiten

    Experimentell Ja Ja

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 23

    And the winner is…

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 24

    Multi-Module-Projekt

    ■ Projekt besteht meist aus mehreren Modulen  Build-Reihenfolge muss beachtet

    werden

     Dokumentation über alle Module hinweg erzeugen

    ■ Globale Build- Einstellungen

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 25

    Multi-Module-Projekte

    Konfiguration Sehr einfach Schwierig Sehr einfach

    Modulübergreifende Konfiguration

    Vererbung Imports Configuration

    Injection, Vererbung

    Vererbung Dependencies

    Sehr einfach Schwierig Sehr einfach

    Vorgabe von Dependency-Versionen

    Einfach Schwierig Nicht möglich

    Flexibilität Gering Hoch Hoch

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 26

    And the winner is…

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 27

    ■ Buildausführung ermöglichen

    ■ Syntax Highlighting

    ■ Classpath aus Dependency-Mangement-Konfiguration erstellen

    ■ Code Completion

    IDE-Support

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 28

    ++ ++ ++

    + -- ++

    + ++ ++

    + -- +

    IDE-Support

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 29

    And the winner is…

  • Builddreikampf: Ant, Maven und Gradle | Carl Anders Düvel & Sven Bunge| 30

    ■ Dokumentation

    ■ Literatur

    ■ Community - Hilfe von Hobb