maven2 - die nächste generation des buildmanagements?

41
Copyright 2006 Thorsten Kamann itemis products & solutions GmbH & Co. KG 1 Die nächste Generation des Die nächste Generation des Build-Managements? Build-Managements?

Upload: thorsten-kamann

Post on 13-May-2015

3.327 views

Category:

Business


0 download

DESCRIPTION

Dieser Vortrag fand ebenfalls im Rahmen der Bonner Runde statt. Dort habe ich die neue Version des Build- und Projectmanagementools Maven vorgestellt. Nach einem kurzen Vergleich mit existierenden Lösungen habe ich die Konzepte und Features von Maven2 erläutert.

TRANSCRIPT

Page 1: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

1

Die nächste Generation des Die nächste Generation des Build-Managements?Build-Managements?

Page 2: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

2

InhaltInhalt

Problematik BuildmanagementProblematik Buildmanagement Verfügbare Build-ToolsVerfügbare Build-Tools

Shellskripte, Make-Files, Ant, MavenShellskripte, Make-Files, Ant, Maven Unterschiede und Gemeinsamkeiten von Ant und MavenUnterschiede und Gemeinsamkeiten von Ant und Maven Die Konzepte von MavenDie Konzepte von Maven Features von MavenFeatures von Maven

Lebenszyklen, Projektdeskriptor, Transitive Abhängigkeiten, Repositories, Lebenszyklen, Projektdeskriptor, Transitive Abhängigkeiten, Repositories, Plugins, Assemblies, Projektwebseite, BenutzereinstellungenPlugins, Assemblies, Projektwebseite, Benutzereinstellungen

Integration in Eclipse und NetbeansIntegration in Eclipse und Netbeans Erweiterungsmöglichkeiten von MavenErweiterungsmöglichkeiten von Maven

Archetypen, Plugins (Java und Ant), Wagon-ProviderArchetypen, Plugins (Java und Ant), Wagon-Provider Verwendung von Maven mit AntVerwendung von Maven mit Ant LinksLinks

Page 3: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

3

Problematik BuildmanagementProblematik Buildmanagement

Warum brauche ich ein Build(management)-Tool?Warum brauche ich ein Build(management)-Tool?

Viele Aufgaben während des Entwicklungsprozesses bestehen aus vielen Viele Aufgaben während des Entwicklungsprozesses bestehen aus vielen einzelnen Schritteneinzelnen Schritten

Die IDE kann nur für eine begrenzte Anzahl von Common-Tasks Support Die IDE kann nur für eine begrenzte Anzahl von Common-Tasks Support bietenbieten

Für Continous Integration Systeme muss es möglich sein den Build-Vorgang Für Continous Integration Systeme muss es möglich sein den Build-Vorgang automatisch durchzuführenautomatisch durchzuführen

In einem Projekt wird häufig von Entwicklern mit unterschiedlichen IDE's In einem Projekt wird häufig von Entwicklern mit unterschiedlichen IDE's und Systemkonfigurationen entwickeltund Systemkonfigurationen entwickelt

Page 4: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

4

Build-ToolsBuild-Tools

Eine Auswahl bekannter Build-ToolsEine Auswahl bekannter Build-Tools Shell-, BatchskripteShell-, Batchskripte Make-FilesMake-Files AntAnt MavenMaven

Page 5: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

5

Build-Tools: Shell-, BatchskripteBuild-Tools: Shell-, Batchskripte

Vorteil:Vorteil: Systemnahes SkriptingSystemnahes Skripting Ideal für Quick-HacksIdeal für Quick-Hacks Evtl. ausreichend für sehr kleine Teams auf einer bestimmten PlattformEvtl. ausreichend für sehr kleine Teams auf einer bestimmten Plattform

Nachteile:Nachteile: Keine Plattform-Neutralität, dh. für Linux und Win32-System müssen Keine Plattform-Neutralität, dh. für Linux und Win32-System müssen

unterschiedliche Skripte erzeugt werdenunterschiedliche Skripte erzeugt werden Wartbarkeit ist sehr schlechtWartbarkeit ist sehr schlecht Ufert oft in Skriptorgien ausUfert oft in Skriptorgien aus

Page 6: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

6

Build-Tools: Make-FilesBuild-Tools: Make-Files

Vorteile:Vorteile: Ideal für Projekte, die auf C basierenIdeal für Projekte, die auf C basieren Support von den entsprechenden IDE'sSupport von den entsprechenden IDE's Viel Know-How im Internet verfügbarViel Know-How im Internet verfügbar

Nachteile:Nachteile: Sehr fehleranfälligSehr fehleranfällig Mit Projektgrösse leidet auch die WartbarkeitMit Projektgrösse leidet auch die Wartbarkeit Oftmals nicht Plattform-neutralOftmals nicht Plattform-neutral Für Projekte anderer Programmiersprachen Für Projekte anderer Programmiersprachen

nicht (oder nur schwerlich) zu verwendennicht (oder nur schwerlich) zu verwenden

Page 7: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

7

Build-Tools: AntBuild-Tools: Ant

Vorteile:Vorteile: Sehr einfach verwendbar, da XML-Syntax verwendet wirdSehr einfach verwendbar, da XML-Syntax verwendet wird Sehr guter Support von IDE'sSehr guter Support von IDE's Auch für grosse Projekte noch wartbarAuch für grosse Projekte noch wartbar Erweiterbar und auch für Aufgaben ausserhalb des Buildmanagements Erweiterbar und auch für Aufgaben ausserhalb des Buildmanagements

benutzbarbenutzbar

Nachteile:Nachteile: Kein standardisiertes Vorgehen, d.h. jedes Projekt erfindetKein standardisiertes Vorgehen, d.h. jedes Projekt erfindet

seinen Lifecycle neuseinen Lifecycle neu Bietet keine vorgefertigten Tools, die das Erstellen Bietet keine vorgefertigten Tools, die das Erstellen

von immer wiederkehrenden Tasks überflüssig machtvon immer wiederkehrenden Tasks überflüssig macht

Page 8: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

8

Build-Tools: MavenBuild-Tools: Maven

Vorteile:Vorteile: Build-Prozess wird konfiguriert, nicht „programmiert“Build-Prozess wird konfiguriert, nicht „programmiert“ Leistungsfähiges Dependency-Management mittels RepositoriesLeistungsfähiges Dependency-Management mittels Repositories Definierter Projekt-LifecycleDefinierter Projekt-Lifecycle Sehr erweiterbar und anpassbarSehr erweiterbar und anpassbar Schnell und resourcenschonendSchnell und resourcenschonend Deckt alle Facetten des Buildmanagement ab (z.B. Projektwebseite) Deckt alle Facetten des Buildmanagement ab (z.B. Projektwebseite)

Nachteile:Nachteile: Kein direkter Zugriff auf die einzelnen Tasks, wie z.B. Kein direkter Zugriff auf die einzelnen Tasks, wie z.B.

bei Antbei Ant Der Build-Prozess wird dadurch etwas abstrakterDer Build-Prozess wird dadurch etwas abstrakter Nicht für alle Tasks gibt es bereits Maven-PluginsNicht für alle Tasks gibt es bereits Maven-Plugins

Page 9: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

9

Ant und Maven - GemeinsamkeitenAnt und Maven - Gemeinsamkeiten

Top-Level Projekt bei der Apache Software Foundation (ASF)Top-Level Projekt bei der Apache Software Foundation (ASF) Java-basiert und garantiert so für eine hohe ModularitätJava-basiert und garantiert so für eine hohe Modularität Basiert auf einem XML-FormatBasiert auf einem XML-Format Wird erfolgreich in vielen (OpenSource-)Projekten eingesetztWird erfolgreich in vielen (OpenSource-)Projekten eingesetzt Grosse Community und viel Know-How im Internet/Printmedien Grosse Community und viel Know-How im Internet/Printmedien Viele Drittanbieter bieten zusätzliche Komponenten und/oder ProdukteViele Drittanbieter bieten zusätzliche Komponenten und/oder Produkte

Page 10: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

10

Ant und Maven – Unterschiede Ant und Maven – Unterschiede

AntAnt Kein Dependency-Management Kein Dependency-Management

verfügbarverfügbar

Jeder Teilaspekt des Build-Jeder Teilaspekt des Build-Prozess muss jedes Mal neu Prozess muss jedes Mal neu erstellt werden (z.B. Javac, Unit)erstellt werden (z.B. Javac, Unit)

Kein ähnliches Konzept verfügbarKein ähnliches Konzept verfügbar

Kein ähnliches Konzept verfügbarKein ähnliches Konzept verfügbar

Geignet auch für Aufgaben Geignet auch für Aufgaben ausserhalb von SW-Projektenausserhalb von SW-Projekten

MavenMaven Transitives Dependency-Transitives Dependency-

Management ist zentraler Management ist zentraler BestandteilBestandteil

Viele Teilaspekte werden Out-Of-Viele Teilaspekte werden Out-Of-The-Box mitgeliefert The-Box mitgeliefert

Sämtliche Projektinformationen Sämtliche Projektinformationen befinden sich an einer zentralen befinden sich an einer zentralen Stelle (pom.xml)Stelle (pom.xml)

Sehr einfach komplett auf Sehr einfach komplett auf Domänen anpassbarDomänen anpassbar

Ist darauf nicht ausgelegtIst darauf nicht ausgelegt

Page 11: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

11

Maven - Die KonzepteMaven - Die Konzepte

Jedes Projekt erzeugt ein ArtefaktJedes Projekt erzeugt ein Artefakt Artefakte bestehen aus einer Gruppen-ID (Artefakte bestehen aus einer Gruppen-ID (groupId), Artefakt-ID (), Artefakt-ID (artifactId) )

und einer Versionsnummer (und einer Versionsnummer (version)) Jedes Projekt hat nur einen Source- und einen Test-BaumJedes Projekt hat nur einen Source- und einen Test-Baum Dies kann durch bestimmte Aktionen (Dies kann durch bestimmte Aktionen (generate-Goal) erweitert werden-Goal) erweitert werden Der Buildprozess ist in Lebenszyklen (Der Buildprozess ist in Lebenszyklen (lifecycle, , phase) aufgeteilt) aufgeteilt Jeder Lebenszyklus kann ein oder mehrere Ziele (Jeder Lebenszyklus kann ein oder mehrere Ziele (goals) haben) haben Es müssen nur die Dinge konfiguriert werden, die vom Standard abweichen Es müssen nur die Dinge konfiguriert werden, die vom Standard abweichen

((SuperPOM)) Abhängigkeiten sollen zentral verwaltet werden und von mehreren Projekten Abhängigkeiten sollen zentral verwaltet werden und von mehreren Projekten

verwendet werden könnenverwendet werden können Die Komplexität heutiger Buildskripte soll verringert werden und einem Die Komplexität heutiger Buildskripte soll verringert werden und einem

deskriptiven Format weichendeskriptiven Format weichen

Page 12: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

12

Maven – Die FeaturesMaven – Die Features

Einfaches und anpassbares Projektsetup Einfaches und anpassbares Projektsetup Projektstrukturen sind konsistent, neue Entwickler brauchen nur wenig Zeit, um Projektstrukturen sind konsistent, neue Entwickler brauchen nur wenig Zeit, um

sich einzuarbeitensich einzuarbeiten Transitives Dependency-ManagementTransitives Dependency-Management Bibliotheken können über verschiedene Projekte „geshared“ werdenBibliotheken können über verschiedene Projekte „geshared“ werden Remote und lokale Repositories für die Verteilung von ProjektartefaktenRemote und lokale Repositories für die Verteilung von Projektartefakten Die selben Metadaten werden für den Build-Prozess wie auch für zusätzliche Die selben Metadaten werden für den Build-Prozess wie auch für zusätzliche

Informationen wie z.B. die Projektwebsite und Dokumentation genutztInformationen wie z.B. die Projektwebsite und Dokumentation genutzt Mit wenig Konfiguration können Quellcodeverwaltungen und Release-Mit wenig Konfiguration können Quellcodeverwaltungen und Release-

Management integriert werdenManagement integriert werden Flexible Plugin-StrukturFlexible Plugin-Struktur Support für Domänen-spezifische StrukturenSupport für Domänen-spezifische Strukturen

Page 13: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

13

Maven - Features: Lebenszyklen eines ProjektsMaven - Features: Lebenszyklen eines Projekts

Lebenszyklen sind eines der zentralen Konzepte von MavenLebenszyklen sind eines der zentralen Konzepte von Maven Die meist gebräuchlichsten Lebenszyklen eines Projekts sind:Die meist gebräuchlichsten Lebenszyklen eines Projekts sind:

validate – validiert das Projekt, ob alle Resourcen verfügbar sindvalidate – validiert das Projekt, ob alle Resourcen verfügbar sind compile – Kompiliert den Quellcodecompile – Kompiliert den Quellcode test – Führt die Unit-Tests austest – Führt die Unit-Tests aus package – Erstellt das Projekt-Artefakt, z.B. ein JARpackage – Erstellt das Projekt-Artefakt, z.B. ein JAR integration-test – Führt Tests in der Zielumgebung ausintegration-test – Führt Tests in der Zielumgebung aus verify – Überprüft die erstellten Pakete und führt evtl. vorhandene QS-Tests verify – Überprüft die erstellten Pakete und führt evtl. vorhandene QS-Tests

durchdurch install – Installiert das erstellte Artefakt in das lokale Repositoryinstall – Installiert das erstellte Artefakt in das lokale Repository deploy – Installiert das erstellte Artefakt in ein entferntes (öffentliches) deploy – Installiert das erstellte Artefakt in ein entferntes (öffentliches)

RepositoryRepository

Page 14: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

14

Maven - Features: Lebenszyklen eines ProjektsMaven - Features: Lebenszyklen eines Projekts

Lebenszyklen sind hierarchisch aufgebaut, dh. beim Ausführen eines Lebenszyklen sind hierarchisch aufgebaut, dh. beim Ausführen eines bestimmten Lebenszyklus werden alle vorherigen automatisch mit ausgeführt:bestimmten Lebenszyklus werden alle vorherigen automatisch mit ausgeführt:

mvn install

führt also validate, compile, test, package, verify und install aus.führt also validate, compile, test, package, verify und install aus. Plugins können mittels Annotations oder Konfiguration für einen bestimmten Plugins können mittels Annotations oder Konfiguration für einen bestimmten

Lebenszyklus bereit gestellt werden (siehe auch „Erweiterung von Maven“)Lebenszyklus bereit gestellt werden (siehe auch „Erweiterung von Maven“)

Page 15: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

15

Maven – Features: Der ProjektdeskriptorMaven – Features: Der Projektdeskriptor

Jedes Projekt hat mindestens 1 Projektdeskriptor „pom.xml“Jedes Projekt hat mindestens 1 Projektdeskriptor „pom.xml“ Enthält die Projekt-Metadaten, z.B.:Enthält die Projekt-Metadaten, z.B.:

Informationen des Artefakts, das dieses Projekt erzeugtInformationen des Artefakts, das dieses Projekt erzeugt Informationen über die Entwickler (Name, Kontakt, Rollen)Informationen über die Entwickler (Name, Kontakt, Rollen) SourceControlSourceControl MailinglistenMailinglisten RepositoriesRepositories Plugin-KonfigurationenPlugin-Konfigurationen AbhängigkeitenAbhängigkeiten LizenzinformationenLizenzinformationen BuildkonfigurationBuildkonfiguration

Wird für das Deployment des Projektartifakts in ein Repository genutztWird für das Deployment des Projektartifakts in ein Repository genutzt

Page 16: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

16

Maven – Features: Der ProjektdeskriptorMaven – Features: Der Projektdeskriptor

Eine einfache pom.xml:Eine einfache pom.xml: <project>

<modelVersion>4.0.0</modelVersion><groupId>de.itemis.maven</groupId><artifactId>maven-demo</artifactId><version>1.0</version>

</project>

Braucht das Projekt noch Abhängigkeiten reicht es diese mit in den Braucht das Projekt noch Abhängigkeiten reicht es diese mit in den Projektdeskriptor einzubinden:Projektdeskriptor einzubinden:<dependencies>

<dependency><groupId>GROUPID</groupId><artifactId>ARTIFACTID</artifactId><version>VERSION</version>

</dependency></dependencies>

Page 17: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

17

Maven – Features: Der ProjektdeskriptorMaven – Features: Der Projektdeskriptor

Braucht das Projekt ein zusätzliches Plugin lässt sich das ebenfalls sehr leicht Braucht das Projekt ein zusätzliches Plugin lässt sich das ebenfalls sehr leicht einbinden:einbinden:

<build><plugins>

<plugin><groupId>PLUGIN_GROUPID</groupId><artifactId>PLUGIN_ARTIFACTID</artifactId><version>PLUGIN_VERSION</version><[<configuration/>]

<plugin></plugins>

</build>

Page 18: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

18

Maven – Features: Transitive AbhängigkeitenMaven – Features: Transitive Abhängigkeiten

Eines der Hauptfeatures sind die transitiven Abhängigkeiten, dh. jede Eines der Hauptfeatures sind die transitiven Abhängigkeiten, dh. jede Abhängigkeit kann ihre eigenen Abhängigkeiten mitliefern. In dem Beispiel Abhängigkeit kann ihre eigenen Abhängigkeiten mitliefern. In dem Beispiel würde der Projektdeskriptor nur eine Abhängigkeit auf „Library A“ definieren. würde der Projektdeskriptor nur eine Abhängigkeit auf „Library A“ definieren. Alle anderen Bibliotheken würden automatisch aufgelöst und würden dem Alle anderen Bibliotheken würden automatisch aufgelöst und würden dem Projekt zur Verfügung stehen.Projekt zur Verfügung stehen.

Page 19: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

19

Maven – Features: Transitive AbhängigkeitenMaven – Features: Transitive Abhängigkeiten

Dieses Feature kann nicht deaktiviert werden. Wenn man vermeiden will, dass Dieses Feature kann nicht deaktiviert werden. Wenn man vermeiden will, dass abhängige Bibliotheken aufgelöst werden, kann man dies mit dem <exclusions>-abhängige Bibliotheken aufgelöst werden, kann man dies mit dem <exclusions>-Tag erreichen:Tag erreichen:

<dependency>[...]<exclusions>

<exclusion><groupId>EXCLUSION_GROUPID</groupId><artifactId>EXCLUSION_ARTIFACTID</artifactId>

</exclusion></exclusions>

</dependency>

Page 20: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

20

Maven – Features: Transitive AbhängigkeitenMaven – Features: Transitive Abhängigkeiten

Da ein Projekt aus bestimmten Lebenszyklen besteht (compile, test, Da ein Projekt aus bestimmten Lebenszyklen besteht (compile, test, packaging...) gibt es auch verschiedene Classpaths.packaging...) gibt es auch verschiedene Classpaths.

Während der unterschiedlichen Lebenszyklen eines Projekts werden auch nur Während der unterschiedlichen Lebenszyklen eines Projekts werden auch nur unterschiedliche Abhängigkeiten gebraucht (z.B. jUnit nur während des Tests).unterschiedliche Abhängigkeiten gebraucht (z.B. jUnit nur während des Tests).

Jeder Abhängigkeit kann deswegen ein Scope übergeben werden:Jeder Abhängigkeit kann deswegen ein Scope übergeben werden:

<dependency><groupId>GROUPID</groupId><artifactId>ARTIFACTID</artifactId><version>VERSION</version><scope>SCOPE</scope>

</dependency>

Die Auflösung des Scopes übernimmt Maven eigenständig und ist mit den Die Auflösung des Scopes übernimmt Maven eigenständig und ist mit den Lebenszyklen fest verdrahtet.Lebenszyklen fest verdrahtet.

Page 21: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

21

Maven – Features: Transitive AbhängigkeitenMaven – Features: Transitive Abhängigkeiten

Der Scope kann die folgenden Werte haben:Der Scope kann die folgenden Werte haben: compile – (standard). Abhängigkeiten in diesem Scope werden immer compile – (standard). Abhängigkeiten in diesem Scope werden immer

aufgelöstaufgelöst provided – Abhängigkeiten dieses Scopes sind nicht transitiv und werden provided – Abhängigkeiten dieses Scopes sind nicht transitiv und werden

gewöhnlich von dem JRE oder einem Container bereitgestelltgewöhnlich von dem JRE oder einem Container bereitgestellt runtime – Abhängigkeiten mit diesem Scope werden nur zur Laufzeit runtime – Abhängigkeiten mit diesem Scope werden nur zur Laufzeit

gebraucht, sind also nur während des Testing und der Laufzeit verfügbargebraucht, sind also nur während des Testing und der Laufzeit verfügbar test – Abhängigkeiten, die für das Testing verwendet werden. Ein test – Abhängigkeiten, die für das Testing verwendet werden. Ein

klassisches Beispiel dafür ist die Abhängigkeit zur junit.jarklassisches Beispiel dafür ist die Abhängigkeit zur junit.jar system – Ähnlich wie der „provided“ Scope. Abhängigkeiten mit diesem system – Ähnlich wie der „provided“ Scope. Abhängigkeiten mit diesem

Scope werden nicht im Repository gesucht, sondern müssen vom Entwickler Scope werden nicht im Repository gesucht, sondern müssen vom Entwickler manuell dem Projekt hinzugefügt werden.manuell dem Projekt hinzugefügt werden.

Page 22: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

22

Maven – Features: Transitive AbhängigkeitenMaven – Features: Transitive Abhängigkeiten

Lifecycle/Scope Compile Provided Runtime System TestCompile Runtime Test Tabelle 1: Übersicht Lifecycle <==> Scope

Page 23: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

23

Maven – Features: RepositoriesMaven – Features: Repositories

Repositories sind Aufbewahrungsorte für ProjektartefakteRepositories sind Aufbewahrungsorte für Projektartefakte Unterteilen sich in lokale und entfernte (remote) RepositoriesUnterteilen sich in lokale und entfernte (remote) Repositories

Das lokale Repository ist üblicherweise unter ${user.home}/.m2/repository Das lokale Repository ist üblicherweise unter ${user.home}/.m2/repository zu findenzu finden

Bekannte Remote-Repositories sind:Bekannte Remote-Repositories sind: http://www.ibiblio.org/maven2/http://www.ibiblio.org/maven2/ http://snapshots.maven.codehaus.org/maven2/http://snapshots.maven.codehaus.org/maven2/

Das Maven-Goal „install“ kopiert das Projekt-Artefakt in das lokale Repository, Das Maven-Goal „install“ kopiert das Projekt-Artefakt in das lokale Repository, wohingegen „deploy“ in das entfernte Repository kopiert.wohingegen „deploy“ in das entfernte Repository kopiert.

Das entfernte Repository muss schreibbar sein (FTP, SSH), während zum Das entfernte Repository muss schreibbar sein (FTP, SSH), während zum Auflösen der Abhängigkeiten ein normaler HTTP-Zugriff reichtAuflösen der Abhängigkeiten ein normaler HTTP-Zugriff reicht

Page 24: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

24

Maven – Features: RepositoriesMaven – Features: Repositories

Ein Repository hat eine definierte Verzeichnisstruktur, damit das Auffinden von Ein Repository hat eine definierte Verzeichnisstruktur, damit das Auffinden von Artefakten und bestimmten Versionen standardisiert istArtefakten und bestimmten Versionen standardisiert ist

Innerhalb der Repositories werden die verschiedenen Projektartefakte nach Innerhalb der Repositories werden die verschiedenen Projektartefakte nach diesem Konzept abgelegt:diesem Konzept abgelegt:

GROUPID/ARTIFACTID/VERSION/ARTIFACT-VERSION.jarGROUPID/ARTIFACTID/VERSION/ARTIFACT-VERSION.pom

Die Punkte in Die Punkte in GROUPID wird durch wird durch file.separator ersetzt.ersetzt.AusAus<dependency>

<groupId>de.itemis.maven</groupId><artifactId>maven-demo</artifactId><version>1.0.2</version>

</dependency>wird de/itemis/maven/maven-demo/1.0.2/maven-demo-1.0.2.jarde/itemis/maven/maven-demo/1.0.2/maven-demo-1.0.2.pom

Page 25: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

25

Maven – Features: PluginsMaven – Features: Plugins

Jegliche Funktionalität von Maven wird von Plugins gekapseltJegliche Funktionalität von Maven wird von Plugins gekapselt Plugins werden in der pom.xml aktiviert und konfiguriert:Plugins werden in der pom.xml aktiviert und konfiguriert:<build>

<plugins><plugin>

<groupId>PLUGIN_GROUPID</groupId><artifactId>PLUGIN_ARTIFACTID</artifactId><version>PLUGIN_VERSION</version><[<configuration/>]

<plugin></plugins>

</build> Plugins können aus herkömmlichem Java-Code oder aus Ant-Skripten bestehenPlugins können aus herkömmlichem Java-Code oder aus Ant-Skripten bestehen Es gibt eine Vielzahl an Plugins auf den Webseiten von Maven und CodehausEs gibt eine Vielzahl an Plugins auf den Webseiten von Maven und Codehaus Diese Plugins sind ähnlich gut dokumentiert wie die Ant-TasksDiese Plugins sind ähnlich gut dokumentiert wie die Ant-Tasks

Page 26: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

26

Maven – Features: AssembliesMaven – Features: Assemblies

Assemblies sind Konfigurationen, um Distributionen zu erstellenAssemblies sind Konfigurationen, um Distributionen zu erstellen Distributionen werden in einer eigenen XML-Datei konfiguriert und über Distributionen werden in einer eigenen XML-Datei konfiguriert und über mvn assembly:assembly aufgerufen:aufgerufen:<assembly>

<id>bin</id><formats>

<format>tar.gz</format><format>zip</format>

</formats><fileSets>

<fileSet><includes><include>README*</include></includes>

</fileSet><fileSet>

<directory>target</directory><outputDirectory></outputDirectory><includes><include>*.jar</include></includes>

</fileSet></fileSets>

</assembly>

Page 27: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

27

Maven – Features: ProjektwebseiteMaven – Features: Projektwebseite

Maven kann anhand der Metadaten in der pom.xml eine Projektwebseite Maven kann anhand der Metadaten in der pom.xml eine Projektwebseite erstellenerstellen

Diese Seite wird auf Basis von Cocoon/Forrest erstellt, 2 recht ausgereifte XML-Diese Seite wird auf Basis von Cocoon/Forrest erstellt, 2 recht ausgereifte XML-FrameworksFrameworks

Jeder Teil dieser Projektwebseite ist anpassbarJeder Teil dieser Projektwebseite ist anpassbar Als Eingabeformat wird XML, APT (Almost Plain Text – ein Wiki-ähnliches Als Eingabeformat wird XML, APT (Almost Plain Text – ein Wiki-ähnliches

Format) und FML (für FAQ-Seiten) unterstütztFormat) und FML (für FAQ-Seiten) unterstützt Als Ausgabeformat unterstützt Maven aktuell nur xHTML. PDF ist aber geplant.Als Ausgabeformat unterstützt Maven aktuell nur xHTML. PDF ist aber geplant. Unterstützung für Internationalisierung der Webseite ist auch integriertUnterstützung für Internationalisierung der Webseite ist auch integriert Dadurch, dass die Metadaten der pom.xml genutzt werden, entfällt die Pflege Dadurch, dass die Metadaten der pom.xml genutzt werden, entfällt die Pflege

organisatorischer Daten (wechselnde Entwickler, Änderungen bei Mailinglisten, organisatorischer Daten (wechselnde Entwickler, Änderungen bei Mailinglisten, usw.)usw.)

Page 28: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

28

Maven – Features: ProjektwebseiteMaven – Features: Projektwebseite

Wenn nur die Metadaten der pom.xml verwendet werden enthält die generierte Wenn nur die Metadaten der pom.xml verwendet werden enthält die generierte Webseite folgende Menüpunkte:Webseite folgende Menüpunkte:

Report über die verwendeten AbhängigkeitenReport über die verwendeten Abhängigkeiten MailinglistenMailinglisten Continous IntegrationContinous Integration QuellcodeverwaltungQuellcodeverwaltung BugtrackingBugtracking ProjektteamProjektteam LizenzLizenz

Page 29: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

29

Maven – Features: ProjektwebseiteMaven – Features: Projektwebseite

Auch das Deployment der generierten Webseite übernimmt AntAuch das Deployment der generierten Webseite übernimmt Ant In der pom.xml muss konfiguriert werden wohin die Seite hin deployed werden In der pom.xml muss konfiguriert werden wohin die Seite hin deployed werden

soll:soll:

<distributionManagement><site>

<id>website</id><url>scp://myserver/home/htdocs</url>

</site></distributionManagement>Der Zugang zu dem Server wird in der Der Zugang zu dem Server wird in der settings.xml konfiguriertkonfiguriert

Ein einfachesEin einfaches mvn site-deploy lädt die Seite dann auf den Serverlädt die Seite dann auf den Server

Page 30: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

30

Maven - Features: BenutzereinstellungenMaven - Features: Benutzereinstellungen

Maven kann sowohl globale Einstellungen als auch Benutzereinstellungen habenMaven kann sowohl globale Einstellungen als auch Benutzereinstellungen haben Die Syntax ist in beiden Fällen gleichDie Syntax ist in beiden Fällen gleich Die Benutzereinstellungen befinden sich unter Die Benutzereinstellungen befinden sich unter ${user.home}/.m2/settings.xml

Die globalen Einstellungen sind unter Die globalen Einstellungen sind unter ${m2.home}/conf/settings.xml zu zu findenfinden

U.a. können in den Einstellungen folgende Dinge konfiguriert werden:U.a. können in den Einstellungen folgende Dinge konfiguriert werden: Repositories (lokale und entfernte)Repositories (lokale und entfernte) Mirrors für entfernte RepositoriesMirrors für entfernte Repositories ZugangsberechtigungenZugangsberechtigungen ProxyeinstellungenProxyeinstellungen ProfileProfile PluginGroupsPluginGroups

Page 31: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

31

Maven – Integration in EclipseMaven – Integration in Eclipse

Es gibt bereits ein Plugin für EclipseEs gibt bereits ein Plugin für Eclipse Mit ihm ist es möglich einfach Abhängigkeiten zu suchen und dem Projekt Mit ihm ist es möglich einfach Abhängigkeiten zu suchen und dem Projekt

hinzuzufügen, wobei die eigentlichen Bibliotheken aus dem lokalen Repository hinzuzufügen, wobei die eigentlichen Bibliotheken aus dem lokalen Repository gelinkt und nicht ins Projekt kopiert werdengelinkt und nicht ins Projekt kopiert werden

Über „External Launcher“ können die verschiedenen Lifecycles/Goals gestartet Über „External Launcher“ können die verschiedenen Lifecycles/Goals gestartet werdenwerden

Der verwendete Maven-Embedder bietet nicht die Leistungsfähigkeit wie das Der verwendete Maven-Embedder bietet nicht die Leistungsfähigkeit wie das Maven-CLIMaven-CLI

Es ist problemlos möglich Maven-CLI als external Launcher zu konfigurieren und Es ist problemlos möglich Maven-CLI als external Launcher zu konfigurieren und evtl. ist das auch eine sinnvolle Alternative, um im Plugin implementiert zu evtl. ist das auch eine sinnvolle Alternative, um im Plugin implementiert zu werdenwerden

Page 32: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

32

Maven – Integration in NetbeansMaven – Integration in Netbeans

Auch für Netbeans gibt es ein Modul, welches Maven in die IDE integriertAuch für Netbeans gibt es ein Modul, welches Maven in die IDE integriert Es bietet ein ähnliches Leistungsspektrum wie das Plugin für EclipseEs bietet ein ähnliches Leistungsspektrum wie das Plugin für Eclipse Da auch hier der Maven-Embedder verwendet wird, gibt es ähnliche Da auch hier der Maven-Embedder verwendet wird, gibt es ähnliche

Einschränkungen wie bei EclipseEinschränkungen wie bei Eclipse

Page 33: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

33

Maven - ErweiterungenMaven - Erweiterungen

Maven kann an fast allen Stellen angepasst und erweitert werdenMaven kann an fast allen Stellen angepasst und erweitert werden Domänen-spezifische Strukturen und Prozesse können nachgebildet werdenDomänen-spezifische Strukturen und Prozesse können nachgebildet werden Initiale Projektstrukturen können durch eigene Archetypen bereit gestellt Initiale Projektstrukturen können durch eigene Archetypen bereit gestellt

werdenwerden Bestehende Ant-Targets für besondere Aufgaben können ohne weiteres mit dem Bestehende Ant-Targets für besondere Aufgaben können ohne weiteres mit dem

Ant-Plugin oder einem eigenem Ant-basierten Plugin übernommen werdenAnt-Plugin oder einem eigenem Ant-basierten Plugin übernommen werden Projekt-Artefakte können in besonders geschützte Repositories deployed Projekt-Artefakte können in besonders geschützte Repositories deployed

werdenwerden Für spezielle Protokolle oder höhere Sicherheit können spezielle Wagon-Für spezielle Protokolle oder höhere Sicherheit können spezielle Wagon-

Provider implementiert werdenProvider implementiert werden

Page 34: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

34

Maven – Erweiterungen: Eigene ArchetypenMaven – Erweiterungen: Eigene Archetypen

Archetypen sind einfache Maven-PluginsArchetypen sind einfache Maven-Plugins Mittels eines Deskriptors werden die Verzeichnisstrukturen und Dateien, die das Mittels eines Deskriptors werden die Verzeichnisstrukturen und Dateien, die das

Projekt initial haben soll, festgelegtProjekt initial haben soll, festgelegt Dateien werden als Resource mitgegeben, wobei an der Stelle beliebige Dateien werden als Resource mitgegeben, wobei an der Stelle beliebige

Platzhalter verwendet werden können, die dann bei der Erstellung des Projekts Platzhalter verwendet werden können, die dann bei der Erstellung des Projekts als Java-Properties mitgegeben werden könnenals Java-Properties mitgegeben werden können

Eine pom.xml für das neue Projekt kann schon mit den nötigen Konfigurationen Eine pom.xml für das neue Projekt kann schon mit den nötigen Konfigurationen mitgeliefert werden (Dependencies, Projekttyp, Repositories)mitgeliefert werden (Dependencies, Projekttyp, Repositories)

Ein Ein mvn archetype:create -DarchetypeGroupId=...

-DarchetypeArtefactId=... -DarchetypeVersion=... [-Dproperty=...]

reicht um das komplette Projekt zu erstellenreicht um das komplette Projekt zu erstellen

Page 35: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

35

Maven – Erweiterungen: Plugins (Java)Maven – Erweiterungen: Plugins (Java)

Plugins heissen bei Maven MojoPlugins heissen bei Maven Mojo Die Implementierung ist ähnlich einer ANT-TaskDie Implementierung ist ähnlich einer ANT-Task Das Mojo muss nur Das Mojo muss nur org.apache.maven.plugin.AbstractMojo erweitern und die erweitern und die

Methode Methode execute() überschreiben überschreiben Mit Annotations können für das Mojo u.a. der Lifecycle (Mit Annotations können für das Mojo u.a. der Lifecycle (@phase), das Goal ), das Goal

((@goal) und eine Beschreibung () und eine Beschreibung (@description) gesetzt werden) gesetzt werden Für Parameter des Plugins gibt es die Annotation Für Parameter des Plugins gibt es die Annotation @parameter Parameter können auf erforderlich (Parameter können auf erforderlich (@required) und/oder schreibgeschützt ) und/oder schreibgeschützt

((@readonly) gesetzt werden) gesetzt werden Das fertige Plugin kann mittels Das fertige Plugin kann mittels mvn install bzw. bzw. mvn deployin ein entsprechendes Repository installiert werden und kann dann direkt von in ein entsprechendes Repository installiert werden und kann dann direkt von anderen Projekten verwendet werdenanderen Projekten verwendet werden

Page 36: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

36

Maven – Erweiterungen: Plugins (Java)Maven – Erweiterungen: Plugins (Java)

package sample.plugin;import org.apache.maven.plugin.AbstractMojo;import org.apache.maven.plugin.MojoExecutionException;/*** @goal sayhi* @description Says "Hi" to the user/public class GreetingMojo extends AbstractMojo {

/*** @parameter* @required*/private String greeting;public void execute() throws MojoExecutionException {

getLog().info(greeting); }}

Page 37: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

37

Maven – Erweiterungen: Plugins (Java)Maven – Erweiterungen: Plugins (Java)

<plugin><groupId>sample.plugin</groupId><artifactId>maven-hello-plugin</artifactId><configuration>

<greeting>Welcome</greeting></configuration><executions>

<execution><phase>compile</phase><goals>

<goal>sayhi</goal></goals>

</execution></executions>

</plugin>

Page 38: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

38

Maven – Erweiterungen: Plugins (Ant)Maven – Erweiterungen: Plugins (Ant)

Maven bietet die Möglichkeit Plugins auf Basis von Ant-Skripten zu entwickelnMaven bietet die Möglichkeit Plugins auf Basis von Ant-Skripten zu entwickeln Dabei ist es nicht nötig Java zu programmierenDabei ist es nicht nötig Java zu programmieren Das ist eine ideale Möglichkeit bestehende Ant-Tasks zu übernehmen die gar Das ist eine ideale Möglichkeit bestehende Ant-Tasks zu übernehmen die gar

nicht oder nur mit sehr viel Aufwand nachimplementiert werden könnennicht oder nur mit sehr viel Aufwand nachimplementiert werden können Die Konfiguration und Parameterisierung der Ant-Targets werden in den Plugin-Die Konfiguration und Parameterisierung der Ant-Targets werden in den Plugin-

Metadaten vorgenommenMetadaten vorgenommen Es können sämtliche Features eines Ant-Buildskripts verwendet werdenEs können sämtliche Features eines Ant-Buildskripts verwendet werden Ein Plugin kann mehrere Targets für unterschiedliche Goals enthaltenEin Plugin kann mehrere Targets für unterschiedliche Goals enthalten

Page 39: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

39

Maven – Erweiterungen: Wagon-ProviderMaven – Erweiterungen: Wagon-Provider

Maven bietet die Möglichkeit Projekt-Artefakte in jede Art von Repository zu Maven bietet die Möglichkeit Projekt-Artefakte in jede Art von Repository zu schreibenschreiben

Um spezielle Repositories nutzen zu können, ist es notwendig einen eigenen Um spezielle Repositories nutzen zu können, ist es notwendig einen eigenen Wagon-Provider bereitzustellenWagon-Provider bereitzustellen

Damit können Erfordernisse, wie z.B. CVS-Based Repositories oder spezielle Damit können Erfordernisse, wie z.B. CVS-Based Repositories oder spezielle Authentifizierung, abgedeckt werdenAuthentifizierung, abgedeckt werden

Der Wagon-Provider muss nur vom Der Wagon-Provider muss nur vom org.apache.maven.wagon.AbstractWagon erbenerben

Es müssen nur die Es müssen nur die openConnection(), , put() und und get() Methoden Methoden überschrieben bzw. implementiert werdenüberschrieben bzw. implementiert werden

Der Wagon-Provider kann dann als Extension in der entsprechenden Der Wagon-Provider kann dann als Extension in der entsprechenden pom.xml konfiguriert und verwendet werdenkonfiguriert und verwendet werden

Page 40: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

40

Verwendung von Maven mit AntVerwendung von Maven mit Ant

Einige Aspekte von Maven können in Ant als gewöhnliche Ant-Tasks verwendet Einige Aspekte von Maven können in Ant als gewöhnliche Ant-Tasks verwendet werdenwerden

Abhängigkeiten können aufgelöst werden; auch das Feature Transitive Abhängigkeiten können aufgelöst werden; auch das Feature Transitive Dependencies wird unterstütztDependencies wird unterstützt

Projektartefakte können in Repositories deployed werdenProjektartefakte können in Repositories deployed werden Die Informationen der pom.xml können ausgelesen werden und stehen dann als Die Informationen der pom.xml können ausgelesen werden und stehen dann als

Properties zur VerfügungProperties zur Verfügung Sinnvoll ist es sämtliche Projektinformationen in der pom.xml zu halten, um Sinnvoll ist es sämtliche Projektinformationen in der pom.xml zu halten, um

solche Metadaten zentral pflegen zu könnensolche Metadaten zentral pflegen zu können Auch die Verzeichnisstruktur innerhalb eines Projekts könnte der von Maven Auch die Verzeichnisstruktur innerhalb eines Projekts könnte der von Maven

nachempfunden werdennachempfunden werden So ist es später kein Problem den Buildprozess auf Maven umzustellen und neue So ist es später kein Problem den Buildprozess auf Maven umzustellen und neue

Teammitglieder finden sich sehr schnell zurechtTeammitglieder finden sich sehr schnell zurecht

Page 41: Maven2 - Die nächste Generation des Buildmanagements?

Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG

41

LinksLinks

Maven WebseiteMaven Webseitehttp://maven.apache.org/

FAQsFAQshttp://docs.codehaus.org/display/MAVENUSER/FAQs

MavenUSERMavenUSERhttp://docs.codehaus.org/display/MAVENUSER/Home

Eclipse-PluginEclipse-Pluginhttp://maven.apache.org/eclipse-plugin.html

Eclipse und MavenEclipse und Mavenhttp://maven.apache.org/guides/mini/guide-ide-eclipse.html

Maven Referenzen (Javadocs, Schema,...)Maven Referenzen (Javadocs, Schema,...)http://maven.apache.org/ref/current/index.html