36
© OPITZ CONSULTING GmbH 2009 Seite 1 Automatischer Build mit Maven Stefan Scheidt, Senior Architekt OPITZ CONSULTING Gummersbach GmbH Automatischer Build mit Maven

Automatischer Build mit Maven

Embed Size (px)

DESCRIPTION

Einführung in automatisierten Build mit Maven.

Citation preview

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]