SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Über Ant und Maven zu SBT und Gradle
Persönliche Build-Höllen für Jedermann


Andreas Hartmann & Dr. Halil-Cem Gürsoy




22.09.2011
Speaker

                      Andreas Hartmann [hartmann@adesso.de]
                      Principal Software Engineer
                      Tätigkeitsschwerpunkte:
                      ►   Leichtgewichtige Softwarearchitekturen und Frameworks auf
                          Basis der JEE Plattform
                      ►   Serviceorientierte Architekturen und Portaltechnologien im
                          Kontext der Versicherungs- und Banken-Branche


                      Dr. Halil-Cem Gürsoy
                      Senior Software Engineer
                      Tätigkeitsschwerpunkte:
                      ►   SOA und Integrationsprojekte auf Basis von JEE / Spring
                      ►   Build- & Konfigurationsmanagement


22.09.2011   2   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   3   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   4   SBT & Gradle
Buildmanagement Use Cases




22.09.2011   5   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   6   SBT & Gradle
Ant - Kernfeatures

Imperative Ansatz


Target           Funktionen


Tasks            Aktionen
►   javac
►   delete
►   mkdir
►   junit
►   ...


22.09.2011   7   SBT & Gradle
Ant - Kritikpunkte

►   Programmieren in XML
►   keine Vorgaben, wie die Ressourcen eines Ant-
    Scripts strukturiert sein sollen (src, dist, lib -
    Ordner)
►   keine Standard für Target-Namen (Build, Run,
    Compile, usw.)
►   kein Dependency-Management
►   ...




22.09.2011   8   SBT & Gradle
Ant – Repository Server

►   Welche Bibliotheken werden in welcher Version
    wofür benötigt:
►   Welche Abhängigkeiten habe ich zur Compile,
    Runtime und Test
►   Wie kann ich meine Abhängigkeiten effizient
    Verwalten
►   Wie kann ich Versionskonflikte zwischen den
    Bibliotheken einfacher identifizieren
►   Wie kann ich leichter Reproduzierbarkeit von
    Builds sicherstellen
►   Wie gestallte ich meine Buildskripte übersichtlich
    und wartungsfreundlich

22.09.2011   9   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   10   SBT & Gradle
Maven




22.09.2011   11   SBT & Gradle
Maven




22.09.2011   12   SBT & Gradle
Maven

                    ►   Repositories = Instabil
                    ►   Transitive Dependencys
                    ►   Lizenzen!
                    ►   Interne Plugins
                        > „The latest and greatest“
                        > Maven A != Maven B




22.09.2011   13   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   14   SBT & Gradle
Gradle - Essentials

Buildsprache basiert auf Groovy
►   Initiator: Hans Dockter
►   Projektseite: http://gradle.org/



niedrige Einstiegshürde




                                 applay plugin:
                                 'java'


22.09.2011   15   SBT & Gradle
Gradle - Essentials


►   Convention over Configuration – Standardkonventionen basieren auf
    Maven

►   Pluginkonzept – geeignet für die diversen Sprachen Java, Groovy, Scala

►   Repository Enabled

    > filebasiert oder Maven Repository

    > automatiserte POM Erstellung

►   taskbasiert und leicht erweiterbar – doFirst/doLast

►   Konfiguration der Tasks (deklarativ)

►   Tasktypen definieren das wie (imperativ)

22.09.2011   16   SBT & Gradle
Gradle - Essentials


►   Abhängigkeitsstruktur der Tasks wird als DAG aufgebaut

    > Hook Methoden im Buildlifecycle

►   deterministische sequentielle Abarbeitung

►   beliebig viele Artefakte pro Projekt

►   Inkrementelle Builds

►   Zugriff auf das Gradle Objektmodell

►   Multi-Project Builds

►   Ant Integration



22.09.2011   17   SBT & Gradle
Gradle - Essentials

►   Gradle Wrapper




►   Testing enabled
    > Parallele Unit Tests
    > Seperate JVM für Unit Test
    > Neustart der JVM nach X Test konfigurierbar
    > Debug Modus startbar




22.09.2011   18   SBT & Gradle
Gradle – build.gradle




22.09.2011   19   SBT & Gradle
Gradle – User Interface




22.09.2011   20   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   21   SBT & Gradle
SBT - Essentials

„Simple Build Tool“
►   In Scala implementiert
►   Für Scala-Projekte … aber auch Java!
►   Inzwischen Teil des Typesafe-Stacks




22.09.2011   22   SBT & Gradle
SBT - Essentials

►   Projekt sehr einfach zu initialisieren:
    > JAR herunterladen
        – Home: https://github.com/harrah/xsbt/wiki
    > Starten… warten…




                                                      http://www.flickr.com/photos/carbonnyc/64581364/



22.09.2011   23   SBT & Gradle
SBT - Essentials

►   Konfiguration
    > In Scala-Klassen
►   Convention over Configuration
    > Dokumentation ?
►   Erweiterungen
    > In Scala
    > Plugins
    > Processors
    > Actions




22.09.2011   24   SBT & Gradle
Basic Configuration

►   Simple Konfiguration durch Konfigrationsdatei mit eigener DSL
►   Ab 0.10.x, bis 0.7.x nur über Scala-Klassen


name := "ScalaTrain„

version := "0.1„

organization := "de.adesso.hgu„

javacOptions ++= Seq("-source", "1.6", "-target", "1.6")

scalacOptions += "-deprecation„

scalaVersion := "2.8.1„

libraryDependencies += "org.mockito" % "mockito-all" % "1.8.5" % "test„

libraryDependencies              += "org.scala-tools.testing" %% "specs" % "1.6.7„

libraryDependencies              += "org.scala-tools.testing" %% "scalacheck" % "1.8"




22.09.2011   25   SBT & Gradle
SBT – Full Configuration

►   Einfache eigene Tasks innerhalb der Projektkonfiguration
    > Klasse unter project/build/

        import sbt._

        object MyBuild extends Build {
        lazy val root = Project("root", file(".")) aggregate(sub1)

        configuration.
          lazy val sub1: Project = Project("sub1", file("a"))
           dependsOn(sub2 % "test")

        project.
          lazy val sub2 = Project("sub2", file("b"), delegates = root ::
           Nil)
        }




22.09.2011   26   SBT & Gradle
SBT - Dependencys

►   Dependency Management
    > Manuell möglich (lib-Verzeichnis)
    > POM, Ivy
    > Konfigurationen



 libraryDependencies += groupID % artifactID % revision




22.09.2011   27   SBT & Gradle
SBT - Dependencys

►   Transitive Dependencys ausklammern
    libraryDependencies += "org.apache.hadoop" % "hadoop-core"
         % "0.20.2“ intransitive()
►   Repositorys definieren
    scala resolvers += "Scala-Tools Maven2 Snapshots Repository" at
         "http://scala-tools.org/repo-snapshots"
►   Publishing
    > Abhängig von Ivy
    > Viele Randbedingungen zu beachten
      – wann zieht welche Konfiguration?
►   Tiefe Ivy-Kenntnisse nötig!




22.09.2011   28   SBT & Gradle
SBT

►   Vorteile
    > Kein XML, Konfiguration in
      eigener DSL bzw. Scala
    > Programmieren
    > Verzeichnisstrukturen
►   Nachteile (mehr oder weniger)
    > Konfiguration in Scala / DSL ;-)
    > Lernkurve
    > Dokumentation
    > Ivy-Wissen
    > Schwache IDE
      Integration




                                         http://www.flickr.com/photos/lrargerich/3095189225/


22.09.2011   29   SBT & Gradle
Agenda



         Buildmanagement Use Cases

         Ant

         Maven

         Gradle

         SBT

         Conclusion


22.09.2011   30   SBT & Gradle
Conclusion

Pest oder Cholera?
►   Ant und Maven haben ihre Schwächen
►   SBT ist aussichtsreich
    > Dokumentation der Defaults stark verteilt
    > Erweiterbarkeit gut
    > Aktuell nur in der Scala-Welt „sichtbar“
    > Schlechte IDE-Integration
►   Gradle, der Anwärter
    > Erweiterbarkeit recht einfach
    > Gut lesbare Konfiguration
    > Gute Unterstützung von Multi-Modul Projekten
    > Aussichtsreichster Kandidat




22.09.2011   31   SBT & Gradle
Wir suchen Sie als
   Software-Architekt (m/w)
   Projektleiter (m/w)
   Senior Software Engineer (m/w)


 jobs@adesso.de
 www.AAAjobs.de

Weitere ähnliche Inhalte

Was ist angesagt?

Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Torsten Kleiber
 

Was ist angesagt? (20)

Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
 
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...
 
JAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & JavascriptJAX 2015 - Continuous Integration mit Java & Javascript
JAX 2015 - Continuous Integration mit Java & Javascript
 
Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?Kann ich mit Grails Enterprise Applikationen umsetzen?
Kann ich mit Grails Enterprise Applikationen umsetzen?
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 
Informatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und GrailsInformatik Seminar Groovy Und Grails
Informatik Seminar Groovy Und Grails
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?
 
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...
 
Gameduell Glassfish Migration
Gameduell Glassfish MigrationGameduell Glassfish Migration
Gameduell Glassfish Migration
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
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
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
 
Kaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes seinKaps - Es muss nicht immer Kubernetes sein
Kaps - Es muss nicht immer Kubernetes sein
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
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
 
Best Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in ContainernBest Practices 
Java und JVM in Containern
Best Practices 
Java und JVM in Containern
 

Ähnlich wie Ü̈ber Ant und Maven zu SBT und Gradle

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
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
Oliver Zeigermann
 

Ähnlich wie Ü̈ber Ant und Maven zu SBT und Gradle (20)

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?
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
DWX 2016 -Build and Release Management
DWX 2016 -Build and Release ManagementDWX 2016 -Build and Release Management
DWX 2016 -Build and Release Management
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
DOAG 2010: ADF Faces RC Best Practice
DOAG 2010: ADF Faces RC Best PracticeDOAG 2010: ADF Faces RC Best Practice
DOAG 2010: ADF Faces RC Best Practice
 
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
 
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
 
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
Continuous Integration mit Hudson (JUG Stuttgart, 11.02.2010)
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
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
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
 
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_vollJava magazin9 2012_wls 12c_das_dutzend_ist_voll
Java magazin9 2012_wls 12c_das_dutzend_ist_voll
 
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
Vaadin - Yet another Java Web Framework? (Google DevFest Karlsruhe 2012)
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
Ant Maven
Ant MavenAnt Maven
Ant Maven
 
Softwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration ToolsSoftwarequalitätssicherung mit Continuous Integration Tools
Softwarequalitätssicherung mit Continuous Integration Tools
 
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der DatenbankmigrationstoolsJavaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
Javaland 2016 - Flyway vs. LiquiBase - Battle der Datenbankmigrationstools
 

Mehr von adesso AG

Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
adesso AG
 

Mehr von adesso AG (20)

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teams
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktisch
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Delivery
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaften
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Suche
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architekten
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktiken
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engine
 

Ü̈ber Ant und Maven zu SBT und Gradle

  • 1. Über Ant und Maven zu SBT und Gradle Persönliche Build-Höllen für Jedermann Andreas Hartmann & Dr. Halil-Cem Gürsoy 22.09.2011
  • 2. Speaker Andreas Hartmann [hartmann@adesso.de] Principal Software Engineer Tätigkeitsschwerpunkte: ► Leichtgewichtige Softwarearchitekturen und Frameworks auf Basis der JEE Plattform ► Serviceorientierte Architekturen und Portaltechnologien im Kontext der Versicherungs- und Banken-Branche Dr. Halil-Cem Gürsoy Senior Software Engineer Tätigkeitsschwerpunkte: ► SOA und Integrationsprojekte auf Basis von JEE / Spring ► Build- & Konfigurationsmanagement 22.09.2011 2 SBT & Gradle
  • 3. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 3 SBT & Gradle
  • 4. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 4 SBT & Gradle
  • 6. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 6 SBT & Gradle
  • 7. Ant - Kernfeatures Imperative Ansatz Target Funktionen Tasks Aktionen ► javac ► delete ► mkdir ► junit ► ... 22.09.2011 7 SBT & Gradle
  • 8. Ant - Kritikpunkte ► Programmieren in XML ► keine Vorgaben, wie die Ressourcen eines Ant- Scripts strukturiert sein sollen (src, dist, lib - Ordner) ► keine Standard für Target-Namen (Build, Run, Compile, usw.) ► kein Dependency-Management ► ... 22.09.2011 8 SBT & Gradle
  • 9. Ant – Repository Server ► Welche Bibliotheken werden in welcher Version wofür benötigt: ► Welche Abhängigkeiten habe ich zur Compile, Runtime und Test ► Wie kann ich meine Abhängigkeiten effizient Verwalten ► Wie kann ich Versionskonflikte zwischen den Bibliotheken einfacher identifizieren ► Wie kann ich leichter Reproduzierbarkeit von Builds sicherstellen ► Wie gestallte ich meine Buildskripte übersichtlich und wartungsfreundlich 22.09.2011 9 SBT & Gradle
  • 10. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 10 SBT & Gradle
  • 11. Maven 22.09.2011 11 SBT & Gradle
  • 12. Maven 22.09.2011 12 SBT & Gradle
  • 13. Maven ► Repositories = Instabil ► Transitive Dependencys ► Lizenzen! ► Interne Plugins > „The latest and greatest“ > Maven A != Maven B 22.09.2011 13 SBT & Gradle
  • 14. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 14 SBT & Gradle
  • 15. Gradle - Essentials Buildsprache basiert auf Groovy ► Initiator: Hans Dockter ► Projektseite: http://gradle.org/ niedrige Einstiegshürde applay plugin: 'java' 22.09.2011 15 SBT & Gradle
  • 16. Gradle - Essentials ► Convention over Configuration – Standardkonventionen basieren auf Maven ► Pluginkonzept – geeignet für die diversen Sprachen Java, Groovy, Scala ► Repository Enabled > filebasiert oder Maven Repository > automatiserte POM Erstellung ► taskbasiert und leicht erweiterbar – doFirst/doLast ► Konfiguration der Tasks (deklarativ) ► Tasktypen definieren das wie (imperativ) 22.09.2011 16 SBT & Gradle
  • 17. Gradle - Essentials ► Abhängigkeitsstruktur der Tasks wird als DAG aufgebaut > Hook Methoden im Buildlifecycle ► deterministische sequentielle Abarbeitung ► beliebig viele Artefakte pro Projekt ► Inkrementelle Builds ► Zugriff auf das Gradle Objektmodell ► Multi-Project Builds ► Ant Integration 22.09.2011 17 SBT & Gradle
  • 18. Gradle - Essentials ► Gradle Wrapper ► Testing enabled > Parallele Unit Tests > Seperate JVM für Unit Test > Neustart der JVM nach X Test konfigurierbar > Debug Modus startbar 22.09.2011 18 SBT & Gradle
  • 20. Gradle – User Interface 22.09.2011 20 SBT & Gradle
  • 21. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 21 SBT & Gradle
  • 22. SBT - Essentials „Simple Build Tool“ ► In Scala implementiert ► Für Scala-Projekte … aber auch Java! ► Inzwischen Teil des Typesafe-Stacks 22.09.2011 22 SBT & Gradle
  • 23. SBT - Essentials ► Projekt sehr einfach zu initialisieren: > JAR herunterladen – Home: https://github.com/harrah/xsbt/wiki > Starten… warten… http://www.flickr.com/photos/carbonnyc/64581364/ 22.09.2011 23 SBT & Gradle
  • 24. SBT - Essentials ► Konfiguration > In Scala-Klassen ► Convention over Configuration > Dokumentation ? ► Erweiterungen > In Scala > Plugins > Processors > Actions 22.09.2011 24 SBT & Gradle
  • 25. Basic Configuration ► Simple Konfiguration durch Konfigrationsdatei mit eigener DSL ► Ab 0.10.x, bis 0.7.x nur über Scala-Klassen name := "ScalaTrain„ version := "0.1„ organization := "de.adesso.hgu„ javacOptions ++= Seq("-source", "1.6", "-target", "1.6") scalacOptions += "-deprecation„ scalaVersion := "2.8.1„ libraryDependencies += "org.mockito" % "mockito-all" % "1.8.5" % "test„ libraryDependencies += "org.scala-tools.testing" %% "specs" % "1.6.7„ libraryDependencies += "org.scala-tools.testing" %% "scalacheck" % "1.8" 22.09.2011 25 SBT & Gradle
  • 26. SBT – Full Configuration ► Einfache eigene Tasks innerhalb der Projektkonfiguration > Klasse unter project/build/ import sbt._ object MyBuild extends Build { lazy val root = Project("root", file(".")) aggregate(sub1) configuration. lazy val sub1: Project = Project("sub1", file("a")) dependsOn(sub2 % "test") project. lazy val sub2 = Project("sub2", file("b"), delegates = root :: Nil) } 22.09.2011 26 SBT & Gradle
  • 27. SBT - Dependencys ► Dependency Management > Manuell möglich (lib-Verzeichnis) > POM, Ivy > Konfigurationen libraryDependencies += groupID % artifactID % revision 22.09.2011 27 SBT & Gradle
  • 28. SBT - Dependencys ► Transitive Dependencys ausklammern libraryDependencies += "org.apache.hadoop" % "hadoop-core" % "0.20.2“ intransitive() ► Repositorys definieren scala resolvers += "Scala-Tools Maven2 Snapshots Repository" at "http://scala-tools.org/repo-snapshots" ► Publishing > Abhängig von Ivy > Viele Randbedingungen zu beachten – wann zieht welche Konfiguration? ► Tiefe Ivy-Kenntnisse nötig! 22.09.2011 28 SBT & Gradle
  • 29. SBT ► Vorteile > Kein XML, Konfiguration in eigener DSL bzw. Scala > Programmieren > Verzeichnisstrukturen ► Nachteile (mehr oder weniger) > Konfiguration in Scala / DSL ;-) > Lernkurve > Dokumentation > Ivy-Wissen > Schwache IDE Integration http://www.flickr.com/photos/lrargerich/3095189225/ 22.09.2011 29 SBT & Gradle
  • 30. Agenda Buildmanagement Use Cases Ant Maven Gradle SBT Conclusion 22.09.2011 30 SBT & Gradle
  • 31. Conclusion Pest oder Cholera? ► Ant und Maven haben ihre Schwächen ► SBT ist aussichtsreich > Dokumentation der Defaults stark verteilt > Erweiterbarkeit gut > Aktuell nur in der Scala-Welt „sichtbar“ > Schlechte IDE-Integration ► Gradle, der Anwärter > Erweiterbarkeit recht einfach > Gut lesbare Konfiguration > Gute Unterstützung von Multi-Modul Projekten > Aussichtsreichster Kandidat 22.09.2011 31 SBT & Gradle
  • 32. Wir suchen Sie als Software-Architekt (m/w) Projektleiter (m/w) Senior Software Engineer (m/w) jobs@adesso.de www.AAAjobs.de