Transcript
Page 1: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 1Automatischer Build mit Maven

Stefan Scheidt, Senior Architekt

OPITZ CONSULTING Gummersbach GmbH

Automatischer Build mit Maven

Page 2: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 2Automatischer Build mit Maven

Wer ist OPITZ CONSULTING?

Ihr Projektspezialist für Java, SOA und Oracle

Last Minute:Offizieller OC 1

SeiterVon Tom

Page 3: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 3Automatischer Build mit Maven

Wer bin ich?

Software-Entwickler und Architekt

Trainer und Coach

Sprecher und Autor

Page 4: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 4Automatischer Build mit Maven

(Keine) Motivation

In diesem Vortrag keine Motivation für Build-Automatisierung

Aber ein paar Ziele:

Automatisiertes Testen

Continuous Integration

Code-Qualität

Page 5: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 5Automatischer Build mit Maven

Was ist Maven?

„Software Project Management Tool“

Deklaratives Build-System

Convention over Configuration

Wiederverwendung durch Plugins

Dependency Management

Tool für technisches Projekt-Reporting

Page 6: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 6Automatischer Build mit Maven

Was ist Maven? (2)

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

Page 7: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 7Automatischer Build mit Maven

Das „Project Object Model“ (POM)

Beschreibt ein Projekt für Maven...

„Artefakt-Koordinaten“

Informationen für die Webseite

Was enthält das Projekt?

Welche Abhängigkeiten hat das Projekt?

...als XSD-basierte XML-Datei

Page 8: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 8Automatischer 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>

Page 9: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 9Automatischer 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...

Page 10: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 10Automatischer 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

Page 11: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 11Automatischer 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 können in Projekt-POM registriert werden

Page 12: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 12Automatischer 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

Page 13: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 13Automatischer Build mit Maven

Build Lifecycle

Sequenz von „Build-Phasen“

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

Auszug aus Default Lifecycle:

validatevalidate

compilecompile

testtest

packagepackage

verifyverify

installinstall

deploydeployint.-testint.-testtest-comp.test-comp.

Page 14: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 14Automatischer Build mit Maven

Build Lifecycle (2)

Plugin Goals können an Lifecycle-Phasen gebunden werden

Binding wird durch Packaging Type ausgewählt

Maven gibt bereits Bindungen vor

Plugins können

neue Bindungen definieren

Bindungen und Lifecycle anpassen

neue Packaging Types definieren

Page 15: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 15Automatischer Build mit Maven

Beispiel: Binding für jar/war

Lifecycle Phase Plugin:Goalcompile compiler:compile

test-compile compiler:testCompile

test surefire:test

package jar:jar (war:war)

Auszug aus dem Lifecycle Bindingfür Packaging Type jar und war

Page 16: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 16Automatischer 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

Page 17: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 17Automatischer 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“

Page 18: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 18Automatischer 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

Page 19: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 19Automatischer 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

Page 20: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 20Automatischer Build mit Maven

Beispiel: Multimodul-Projekt

opitztoys.project

opitztoys.project

opitztoys.domainopitztoys.domain

opitztoys.serviceopitztoys.service

opitztoys.service.impl

opitztoys.service.impl

opitztoys.webappopitztoys.webapp

„inherits from“„aggregates“„Dependency“

<<runtime>>

Page 21: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 21Automatischer 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

Page 22: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 22Automatischer 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>

Page 23: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 23Automatischer 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

Page 24: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 24Automatischer Build mit Maven

Maven Repositories (2)

repo1.maven.org

repository.springsource.com

repository.jboss.org

~/.m2/repository

pom.xml

Dependency

On DemandDownload

Page 25: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 25Automatischer 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

Page 26: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 26Automatischer Build mit Maven

Repository Manager (2)

repo1.maven.org

repository.springsource.com

repository.jboss.org

~/.m2/repository

pom.xml

Dependency

On DemandDownload

RepositoryManager

Page 27: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 27Automatischer 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/

Page 28: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 28Automatischer 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...

Page 29: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 29Automatischer 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

Page 30: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 30Automatischer Build mit Maven

Maven und Continuous Integration

Support durch diverse CI-Server

CruiseControl

Continuum

Hudson

TeamCity

Bamboo

...

Page 31: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 31Automatischer 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

Page 32: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 32Automatischer Build mit Maven

Maven 3

Umfangreiches Refactoring der Codebase

Neue API für Artifact Resolution

Bessere Unterstützung für IDE-Integration

Kompatibilität mit Maven 2 wird durch Integrationstests sichergestellt

Siehe auchhttp://www.sonatype.com/events/meetup0309/jason-on-maven3

Page 33: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 33Automatischer 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)

Page 34: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 34Automatischer 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/

Page 35: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 35Automatischer Build mit Maven

Fragen und Antworten

Page 36: Automatischer Build mit Maven

© OPITZ CONSULTING GmbH 2009 Seite 36Automatischer Build mit Maven

Kontakt

Stefan Scheidt, Senior Architekt

OPITZ CONSULTING Gummersbach GmbH

Kirchstraße 6, 51647 Gummersbach

[email protected]


Recommended