Automatischer Build mit Maven · Automatischer Build mit Maven © OPITZ CONSULTING GmbH 2010 Seite...
Embed Size (px)
Transcript of Automatischer Build mit Maven · Automatischer Build mit Maven © OPITZ CONSULTING GmbH 2010 Seite...

© 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
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-‐instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-‐v4_0_0.xsd“>
<modelVersion>4.0.0</modelVersion>
<groupId>de.opitzconsulting</groupId>
<artifactId>hellomaven</artifactId>
<version>1.0.0-‐SNAPSHOT</version>
<packaging>jar</packaging>
<name>Hello Maven</name>
<description>Simple Maven Project</description>
</project>

© 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
<!-‐-‐ ... -‐-‐>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-‐jetty-‐plugin</artifactId>
</plugin>
</plugins>
</build>
<!-‐-‐ ... -‐-‐>
...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)
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-‐maven-‐plugin</artifactId> <!-‐-‐ ... -‐-‐> <executions> <execution> <id>create-‐schema-‐before-‐test</id> <!-‐-‐ ... -‐-‐> <execution> <execution> <id>drop-‐schema-‐after-‐test</id> <!-‐-‐ ... -‐-‐> <execution> </executions> </plugin>
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)
<execution> <id>create-‐schema-‐before-‐test</id> <phase>pre-‐integration-‐test</phase> <goals> <goal>execute</goal> </goals> <configuration> <srcFiles> <srcFile> src/main/sql/schema-‐create.sql </srcFile> </srcFiles> </configuration> </execution>
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“
<<run7me>>

© 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

© OPITZ CONSULTING GmbH 2010 Seite 28 Automatischer Build mit Maven
Beispiel: Dependency zu JUnit 4.4
<dependencies>
<!-‐-‐ JUnit -‐-‐>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<!-‐-‐ ... -‐-‐>
</dependencies>

© OPITZ CONSULTING GmbH 2010 Seite 29 Automatischer Build mit Maven
Maven Repositories
Stellen Artefakte bereit
Lokal: im Filesystem („~/.m2/repository“)
Remote: als „Web Service“ zum Download
Default Remote Repository: http://repo1.maven.org/maven2
Weitere Repositories können im Projekt-POM registriert werden

© OPITZ CONSULTING GmbH 2010 Seite 30 Automatischer Build mit Maven
Maven Repositories (2)
repo1.maven.org
repository.springsource.com
repository.jboss.org
~/.m2/repository
pom.xml
Dependency
On Demand Download

© OPITZ CONSULTING GmbH 2010 Seite 31 Automatischer Build mit Maven
Repository Manager
Stellt Remote Repository Service bereit
Zweck: Zentraler Proxy für benötigte Remote Repositories Bereitstellung nicht öffentlich verfügbarer JARs Kontrolle über verwendete JARs Verteilung selbsterstellter Artefakte

© OPITZ CONSULTING GmbH 2010 Seite 32 Automatischer Build mit Maven
Repository Manager (2)
repo1.maven.org
repository.springsource.com
repository.jboss.org
~/.m2/repository
pom.xml
Dependency
On Demand Download
Repository Manager

© OPITZ CONSULTING GmbH 2010 Seite 33 Automatischer Build mit Maven
Repository Manager (3)
Empfehlung: Repository Manager einsetzen! Pro Projekt Unternehmensweit Ggf. gestaffelt: Unternehmen & pro Projekt
Einige R.M.-Implementierungen: Sonatype Nexus http://nexus.sonatype.org/ JFrog Artifactory http://www.jfrog.org/products.php Archiva http://archiva.apache.org/

© OPITZ CONSULTING GmbH 2010 Seite 34 Automatischer Build mit Maven
Site-Generierung
Webseite mit „Projektsteckbrief“
Einbetten von JavaDoc und Projektdoku.
Einbetten von Berichten durch Reporting-Plugins: Checkstyle, JUnit/TestNG, Corbatura, PMD, FindBugs, JDepend, ...
Beispiele: Siehe Open-Source-Projekte, die Maven verwenden...

© OPITZ CONSULTING GmbH 2010 Seite 35 Automatischer Build mit Maven
Maven und IDEs
Eclipse eclipse: Maven Plugin für Eclipse m2eclipse: Eclipse Plugin für Maven Eclipse IAM: Integration von eclipse.org
NetBeans Ab Version 6.7 direktes Ausführen von Maven
IntelliJ Build-In-Support für Import von Maven-Projekten

© OPITZ CONSULTING GmbH 2010 Seite 36 Automatischer Build mit Maven
Maven und Continuous Integration
Support durch diverse CI-Server
CruiseControl
Continuum
Hudson
TeamCity
Bamboo
...

© OPITZ CONSULTING GmbH 2010 Seite 37 Automatischer Build mit Maven
Maven und OSGi
Auf den ersten Blick passen Maven und OSGi gut zusammen
Die Dependency-Konzepte unterscheiden sich aber grundlegend... Und: „Wer ist der Boss“?
Es gibt aber Integrationssupport Maven-Bundle-Plugin http://tinyurl.com/66q93b
Pax Construct http://www.ops4j.org/projects/pax/construct
SpringSource Bundlor http://www.springsource.org/bundlor
Tycho http://docs.codehaus.org/display/M2ECLIPSE/Tycho+project+overview

© OPITZ CONSULTING GmbH 2010 Seite 38 Automatischer Build mit Maven
Maven 3
Quelle: Jason van Zyl, Maven Reloaded, Devoxx 2010

© OPITZ CONSULTING GmbH 2010 Seite 39 Automatischer Build mit Maven
Maven 3
Umfangreiches Refactoring der Codebase
Neue API für Artifact Resolution
Beschleunigung des Build-Prozesses durch Caching
Verbesserungen für Multimodul-Projekte
Bessere Unterstützung für IDE-Integration
Kompatibilität mit Maven 2 wird durch Integrationstests sichergestellt
Siehe auch http://www.sonatype.com/events/meetup0309/jason-on-maven3

© OPITZ CONSULTING GmbH 2010 Seite 40 Automatischer Build mit Maven
Fazit und Bewertung
Standardisierung zahlt sich bei einer großen Zahl von Projekten aus
Schnelle Ergebnisse bei Standard-Anforderungen
Für komplexere Anpassungen ist jedoch umfangreiche Einarbeitung nötig
Passt evtl. nicht bei sehr individuellen Anforderungen (bzw. sehr großer Aufwand)

© OPITZ CONSULTING GmbH 2010 Seite 41 Automatischer Build mit Maven
Links Projekt-Seite
http://maven.apache.org/ Maven The Definitive Guide
http://www.sonatype.com/books/maven-book/reference/ DZone Refcard
http://refcardz.dzone.com/refcardz/apache-maven-2 Maven How Tos
http://www.sonatype.com/people/2009/04/summary-of-maven-how-tos/ Nexus
http://nexus.sonatype.org/ Artifactory
http://www.jfrog.org/products.php m2eclipse
http://m2eclipse.codehaus.org/

© OPITZ CONSULTING GmbH 2010 Seite 42 Automatischer Build mit Maven
Fragen und Antworten

© OPITZ CONSULTING GmbH 2010 Seite 43 Automatischer Build mit Maven
Kontakt
Stefan Scheidt, Senior Architekt
OPITZ CONSULTING Gummersbach GmbH
Kirchstraße 6, 51647 Gummersbach