If you can't read please download the document
View
0
Download
0
Embed Size (px)
© 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