Automatischer Build mit Maven Automatischer Build mit Maven آ© OPITZ CONSULTING GmbH 2010 Seite 2 Wer

  • View
    0

  • Download
    0

Embed Size (px)

Text of Automatischer Build mit Maven Automatischer Build mit Maven آ© OPITZ CONSULTING GmbH 2010 Seite 2...

  • © OPITZ CONSULTING GmbH 2010 Seite 1 Automatischer Build mit Maven

    Stefan Scheidt, Senior Architekt

    OPITZ CONSULTING Gummersbach GmbH

    Automatischer Build mit Maven

  • © OPITZ CONSULTING GmbH 2010 Seite 2 Automatischer Build mit Maven

    Wer ist OPITZ CONSULTING?

    Ihr Projektspezialist für Java, SOA und Oracle

    Last Minute: Offizieller OC 1

    Seiter Von Tom

  • © OPITZ CONSULTING GmbH 2010 Seite 3 Automatischer Build mit Maven

    Wer bin ich?

  • © OPITZ CONSULTING GmbH 2010 Seite 4 Automatischer Build mit Maven

    Der Softwarearchitekt…

  • © OPITZ CONSULTING GmbH 2010 Seite 5 Automatischer Build mit Maven

    Der Coach…

  • © OPITZ CONSULTING GmbH 2010 Seite 6 Automatischer Build mit Maven

    Der Referent…

  • © OPITZ CONSULTING GmbH 2010 Seite 7 Automatischer Build mit Maven

    Der Autor...

  • © OPITZ CONSULTING GmbH 2010 Seite 8 Automatischer Build mit Maven

    Der Vater...

  • © OPITZ CONSULTING GmbH 2010 Seite 9 Automatischer Build mit Maven

    Und jetzt Sie...

  • © OPITZ CONSULTING GmbH 2010 Seite 10 Automatischer Build mit Maven

    (Keine) Motivation

    In diesem Vortrag keine Motivation für Build-Automatisierung

    Aber Erinnerung an ein paar Ziele:

      Automatisiertes Testen

      Continuous Integration

      Code-Qualität

  • © OPITZ CONSULTING GmbH 2010 Seite 11 Automatischer Build mit Maven

    Was ist Maven?

      „a Yiddish word meaning accumulator of knowledge “

      „a Software Project Management Tool“

      Ein deklaratives Build-System  Convention over Configuration  Wiederverwendung durch Plugins  Dependency Management

      Ein Tool für technisches Projekt-Reporting

  • © OPITZ CONSULTING GmbH 2010 Seite 12 Automatischer Build mit Maven

    Was ist Maven? (2)

      Ein Open-Source-Projekt bei Apache

      Entstanden 2002 für diverse Apache-Projekte

      Ziel: Vereinheitlichen von  Build  Verteilung  Erstellen einer Projekt-Webseite   ... Don‘t repeat yourself!

    Siehe auch http://maven.apache.org/what-is-maven.html

  • © OPITZ CONSULTING GmbH 2010 Seite 13 Automatischer Build mit Maven

    Das „Project Object Model“ (POM)

      Beschreibt ein Projekt für Maven durch...  „Artefakt-Koordinaten“   Informationen für die Webseite  „Inhalt“ des Projekt  Abhängigkeiten des Projekt  Packaging Type (jar, war, ear, ...)

    ...als XSD-basierte XML-Datei

  • © OPITZ CONSULTING GmbH 2010 Seite 14 Automatischer Build mit Maven

    (Nahezu) minimales POM

  • © OPITZ CONSULTING GmbH 2010 Seite 15 Automatischer Build mit Maven

    Convention over Configuration

      Diese Projektbeschreibung wird durch Voreinstellungen ergänzt, ...

      ... die im „Super POM“ definiert sind http://maven.apache.org/pom.html#The_Super_POM

      Dadurch kann man jetzt schon kompilieren, (JUnit-)Tests ausführen, JAR bauen, JAR verteilen, Projekt-Website generieren.

      In diesem Sinne „Convention over Configuration“

  • © OPITZ CONSULTING GmbH 2010 Seite 16 Automatischer Build mit Maven

    Standard-Verzeichnisstruktur

    /src/main/java  

    /src/main/resources  

    /src/main/webapp  

    /src/test/java  

    /src/test/resources  

    /target/classes  

    /target/test-­‐classes  

  • © OPITZ CONSULTING GmbH 2010 Seite 17 Automatischer Build mit Maven

    Maven Plugins

      Im Kern ist Maven eine Laufzeitumgebung für Plugins

      Diese stellen die eigentlichen Build-Funktionen als „Goals“ zur Verfügung

      Das „Super POM“ macht die gebräuchlichsten Plugins verfügbar (compile, test, jar/war, ...)

      Weitere Plugins können in Projekt-POM registriert werden

  • © OPITZ CONSULTING GmbH 2010 Seite 18 Automatischer Build mit Maven

    Beispiel: Jetty Plugin

     

     

             

                     

                           org.mortbay.jetty  

                           maven-­‐jetty-­‐plugin  

                     

             

     

     

    ...und „mvn jetty:run“ startet Jetty

  • © OPITZ CONSULTING GmbH 2010 Seite 19 Automatischer Build mit Maven

    Build Lifecycle

      Sequenz von „Build-Phasen“

      Eingebaute Lifecycle: „clean“, „default“, „site“

      Auszug aus Default Lifecycle:

    validate  

    compile  

    test  

    package  

    verify  

    install  

    deploy  int.-­‐test  test-­‐comp.  

  • © OPITZ CONSULTING GmbH 2010 Seite 20 Automatischer Build mit Maven

    Build Lifecycle (2)

      Plugin Goals können an Lifecycle-Phasen gebunden werden

      Binding wird durch Packaging Type ausgewählt

      Die Standardkonfiguration gibt bereits Bindungen vor

      Plugins können  neue Bindungen definieren  Bindungen und Lifecycle anpassen  neue Packaging Types definieren

  • © OPITZ CONSULTING GmbH 2010 Seite 21 Automatischer Build mit Maven

    Beispiel: Binding für jar/war

    Lifecycle  Phase   Plugin:Goal   compile   compiler:compile  

    test-­‐compile   compiler:testCompile  

    test   surefire:test  

    package   jar:jar  (war:war)  

    Auszug aus dem Lifecycle Binding für Packaging Type jar und war

  • © OPITZ CONSULTING GmbH 2010 Seite 22 Automatischer Build mit Maven

    Beispiel: Custom Binding (1)

             org.codehaus.mojo          sql-­‐maven-­‐plugin                                                                create-­‐schema-­‐before-­‐test                                                                                        drop-­‐schema-­‐after-­‐test                                                          

    Auszug aus einem POM: Konfiguration für SQL Plugin mit zwei Executions

  • © OPITZ CONSULTING GmbH 2010 Seite 23 Automatischer Build mit Maven

    Beispiel: Custom Binding (2)

             create-­‐schema-­‐before-­‐test          pre-­‐integration-­‐test                            execute                                                                                                  src/main/sql/schema-­‐create.sql                                                          

    Auszug aus einem POM: Execution-Konfiguration für die Phase „pre-integration-test“

  • © OPITZ CONSULTING GmbH 2010 Seite 24 Automatischer Build mit Maven

    POMs und Vererbung

      POMs können von einem Parent POM erben

      Wurzel ist das „Super POM“

      Ein Parent POM kann vererben:  Plugin-Konfigurationen  Dependencies  vieles mehr...

      Häufig in Verbindung mit Multimodul-Projekten

  • © OPITZ CONSULTING GmbH 2010 Seite 25 Automatischer Build mit Maven

    Multimodul-Projekte

      Ein Maven-Projekt kann nur ein Artefakt produzieren

      Maven forciert dadurch die Aufteilung eines Projekts auf mehrere Sub-Projekte

      Diese können durch ein Multimodul-Projekt zusammengefasst und gemeinsam gebaut werden

      Multimodul-POM ist meist auch Parent POM

  • © OPITZ CONSULTING GmbH 2010 Seite 26 Automatischer Build mit Maven

    Beispiel: Multimodul-Projekt

    opitztoys.project  

    opitztoys.domain  

    opitztoys.service  

    opitztoys.service.impl  

    opitztoys.webapp  

    „inherits  from“  

    „aggregates“  

    „Dependency“  

     

  • © OPITZ CONSULTING GmbH 2010 Seite 27 Automatischer Build mit Maven

    Dependency Management

      Dependencies beschreiben Abhängigkeiten zu Java-Bibliotheken (JARs)

      werden über „Artefakt-Koordinaten“ spezifiziert

      können durch „Scopes“ (compile, test, runtime, provided, ...) qualifiziert werden

      werden bei Bedarf aus einem „Remote Repository“ heruntergeladen