maven2 - die nächste generation des buildmanagements?
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
Copyright 2006 Thorsten Kamannitemis products & solutions GmbH & Co. KG
1
Die nächste Generation des Die nächste Generation des Build-Managements?Build-Managements?
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
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
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
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
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
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
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
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
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
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
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
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
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“)
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
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>
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>
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.
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>
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.
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.
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
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
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
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
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>
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.)
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
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
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
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
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
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
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
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
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); }}
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>
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
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
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
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