Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick...
Embed Size (px)
Transcript of Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick...

Maven 3Konfi gurationsmanagement mit Java
Auszligerdem bei mitp
Aus dem Inhalt
bull Lifecycles
bull POM ndash Das Project Object Model
bull Dependencies
bull Projektbeziehungen
bull Repositories
bull Plugins ausfuumlhren
bull Properties und Filtering
bull Profi le
bull Source Code Management
bull Software veroumlffentlichen
bull Plugins schreiben
bull Maven und Eclipse
bull Reporting und Dokumentation
bull Qualitaumltsmanagement
bull Apache Archiva und Apache Continuum
bull Konfi gurationsdateien
bull Referenzen
Maven ist ein Build- und Konfigurationsmanagement-Tool der Apache Software Foundation und basiert auf Java Mit Maven lassen sich Java-Projekte standardisiert erstellen und verwalten Ziel ist die Automatisierung und Vereinfachung immer wieder anfallender Aufgaben
Der Autor erlaumlutert die grundlegenden Konzepte und Module von Maven und zeigt wie diese im Projektall-tag eingesetzt werden koumlnnen Das Buch richtet sich an Softwareentwickler und -architekten an technische Projektleiter und alle die sich mit Konfigurationsma-nagement beschaumlftigen
Zunaumlchst gibt der Autor einen Schnelleinstieg in Maven und erlaumlutert die elementaren Befehle und Konfigura-tionsschritte so dass Sie sofort erste Projekte mit Maven erstellen und bearbeiten koumlnnen Die folgenden Kapi-tel vermitteln die grundlegenden Konzepte und Prin-zipien zB zu Verzeichnis- und Namenskonventionen Lifecycles Dependencies Projektbeziehungen und zum Projektmodell Alle weiteren Kapitel behandeln einzel-ne Themen die im Verlaufe eines Projektes eine Rolle spielen koumlnnen wie ua Repositories Plugins das Ver-oumlffentlichen von Software Reporting und Dokumenta-tion sowie Qualitaumltsmanagement So erhalten Sie einen umfassenden Einblick in Maven
Dieses Buch eignet sich sowohl als Einfuumlhrung als auch als Referenz und Arbeitsbuch fuumlr die taumlgliche Praxis
Uumlber den AutorMartin Spiller ist Diplom-Mathematiker und arbeitet als Softwareentwickler und Berater im Java-Umfeld fuumlr die neusta GmbH Seine Schwerpunkte sind Software-qualitaumlt Konfigurationsmanagement und Performance-Tuning
(D) euro
29
95
Lifecycles Dependencies Projektbeziehungen
Repositories Plugins Properties und Filtering
Profi le Reporting Dokumentation Qualitaumltsmanagement
ISBN 978-3-8266-9118-8ISBN 978-3-8266-9118-8
Spill
erM
aven
320 mm
ISBN 978-3-8266-9066-2
ISBN 978-3-8266-9046-4
Martin Spiller
ISBN 978-3-8266-5548-7
Konfi
gur
atio
nsm
anag
emen
t m
it Ja
va
978-3-8266-9118_umschlag03indd 1-3 7122011 110646 AM
27
Kapitel 2
Maven im Uumlberblick
Dieses Kapitel beschreibt wie Maven installiert und ein erstes Projekt erstelltwird Anhand dieses Projekts werden die wichtigsten Maven-Aufrufe gezeigt Aufdie detaillierte Beschreibung in spaumlteren Kapiteln wird entsprechend verwiesen
21 Was ist Maven
Maven ist ein deklaratives Build Management System Das heiszligt es wird lediglichder Inhalt des Projekts beschrieben nicht die Struktur oder die Ablaumlufe die zurKompilierung und Veroumlffentlichung notwendig sind Die Philosophie hinterMaven heiszligt Konvention uumlber Konfiguration ndash Strukturen muumlssen nicht definiertwerden sondern sind vorgegeben So wie die Projekt- und Verzeichnisstruktur istauch die Reihenfolge der Arbeitsschritte vorgegeben die Maven ausfuumlhrt um einProjekt zu bauen In der pomxml von Maven 209 beschreiben die EntwicklerMaven so
Maven is a project development management and comprehension tool Basedon the concept of a project object model builds dependency managementdocumentation creation site publication and distribution publication are allcontrolled from the declarative file Maven can be extended by plugins to utilisea number of other development tools for reporting or the build process
211 POM
Maven verwendet ein Projektmodell (POM ndash Project Object Model) um Abhaumlngig-keiten Projektumgebung und Projektbeziehungen zu speichern Das Projektmo-dell wird in der Datei pomxml gespeichert und ist vererbbar
Hinweis
Maven verwendet fuumlr alle Aufgaben Plugins die beim ersten Aufruf aus demNetz geladen werden muumlssen Wundern Sie sich also nicht wenn die ersten Auf-rufe etwas laumlnger dauern Da das Herunterladen der Bibliotheken auf der Kon-sole protokolliert wird gehen beim ersten Aufruf eines Befehls die wesentlichenInformationen schnell unter Rufen Sie zur Not den Befehl einfach noch mal aufGegebenenfalls rufen Sie vorher mvn clean auf um generierte Dateien zuloumlschen
Maven_9118-8book Seite 27 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
28
212 Lebenszyklen
Die Entwickler von Maven gehen von immer wiederkehrenden Ablaumlufen in Pro-jekten aus die in so genannten Lebenszyklen (Lifecycles) abgebildet werden DerStandardzyklus ist der Build-Lifecycle der aus einer festen Abfolge von Phasenbesteht Die einzelnen Phasen koumlnnen mit Plugins verknuumlpft werden die mit derPhase ausgefuumlhrt werden Wird eine Phase aufgerufen zum Beispiel test wer-den alle Phasen des Zyklus die vor test liegen abgearbeitet Das heiszligt um Testsauszufuumlhren werden immer alle notwendigen Schritte ausgefuumlhrt
1 Kompilieren des Produktivcodes
2 Kompilieren des Testcodes
3 Ausfuumlhren der Tests
213 Vereinfachtes Build-Management
Durch die Verwendung einheitlicher Verzeichnisstrukturen ist es einfach in Pro-jekte einzusteigen die mit Maven verwaltet werden Der Build-Lifecycle kapselt dieeinzelnen Phasen die langwierige Analyse von Makefiles oder Build-Skripten umherauszufinden welcher Befehl als Erstes aufgerufen werden muss entfaumlllt
214 Trennung von Code und Unit-Tests
Maven trennt den produktiven Projektcode physisch vom Code der Unit-Tests DieCode-Basen liegen parallel in unterschiedlichen Quell-Verzeichnissen und diekompilierten Klassen werden in unterschiedlichen Verzeichnissen verwaltetGenauso sind die Konfiguration der Unit-Tests und die dazugehoumlrigen Ressourcenvom restlichen Code getrennt
215 Verwaltung von Abhaumlngigkeiten
Maven verwendet ein einziges lokales Verzeichnis genannt Repository in demBibliotheken zentral fuumlr alle Projekte abgelegt werden Benoumltigte Bibliothekenwerden selbststaumlndig ins lokale Repository kopiert und aktualisiert Damit eruumlbrigtsich die Notwendigkeit in Projekten Bibliotheken in das Versionskontrollsystemeinchecken zu muumlssen Transitive Abhaumlngigkeiten also die Abhaumlngigkeiten vonAbhaumlngigkeiten werden selbststaumlndig analysiert und aufgeloumlst Unter Maven ist esdaher sehr einfach Bibliotheken auszutauschen Auch das Entfernen von Abhaumln-gigkeiten aus Projekten wird deutlich einfacher Verschwindet die Abhaumlngigkeitverschwinden auch die transitiven Abhaumlngigkeiten Es bleiben keine Dateileichenzuruumlck
Maven_9118-8book Seite 28 Dienstag 12 Juli 2011 443 16
22Voraussetzungen
29
216 Artefakte
Maven beschreibt genau genommen keine vollstaumlndigen Projekte sondern Arte-fakte eigenstaumlndige Teile eines Projekts die einzeln ausgeliefert werden koumlnnenIn kleinen Projekten laumlsst sich das gesamte Projekt mit einem einzigen Artefaktbeschreiben Ein Artefakt wird durch eindeutige Koordinaten beschrieben die imPOM abgelegt sind Jedes Maven-Projekt erzeugt ein Artefakt
217 Informationen zu Codequalitaumlt und Projektzustand
Mit Maven lassen sich Reports und Projektinformationen generieren die in einerProjektwebseite zusammengefasst werden Hierzu gehoumlren unter anderem
API-Dokumentation
Unit-Test-Ergebnisse und Testabdeckung
Changelogs des Versionskontrollsystems
Liste der Abhaumlngigkeiten
Reports zur Codequalitaumlt durch Tools wie PMD Checkstyle und FindBugs
Informationen zu Bug-Tracking Mailing-Listen und Continuous Integration
Verwendete Bibliotheken und deren Benutzung
22 Voraussetzungen
221 Betriebssystem
Maven laumluft auf Windows-Systemen ab NT Mac OS X- und Linux-Systemen Per-soumlnlich verwendet habe ich Maven auf Windows 2000 (SP4) XP (SP2 und 3) sowieSUSE Linux 9 und Ubuntu 7x und 8x
222 JDK
Maven benoumltigt zur Ausfuumlhrung ein JDK ab Version 15 Es ist aber moumlglich mitMaven auch Java-Projekte fuumlr aumlltere JDKs zu verwalten Die UmgebungsvariableJAVA_HOME muss auf das Java-Installationsverzeichnis verweisen
223 Speicherplatz
Arbeitsspeicher
Es ist keine Mindestanforderung fuumlr Arbeitsspeicher angegeben Mit den heuteuumlblichen Speichergroumlszligen sollte es auch keine Probleme geben Maven 209 liefauf einem Ubuntu 704-System mit 512 MB RAM und Java5 ohne Probleme Dasmag sich bei groszligen Projekten vor allem beim Generieren der Site aber andersverhalten
Maven_9118-8book Seite 29 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
30
Festplatte
Maven 303 selber benoumltigt etwa 3 MB auf der Festplatte Fuumlr das lokale Repositorykann dann je nach Projekten einiges an Speicher dazukommen Auf der Maven-Homepage sind 100 MB als Richtwert angegeben auf meinem Arbeitsrechnersind allerdings mehr als 330 MB durch das Repository belegt (ich habe in den letz-ten Monaten allerdings auch reichlich Plugins ausprobiert hellip)
23 Installation
Um Maven zu installieren sind folgende Schritte notwendig
1 Laden Sie Maven vom Apache-Server herunter httpmavenapacheorgdownloadhtml
Verfuumlgbar sind die Formate zip targz und tarbz2
2 Entpacken Sie Maven in ein Verzeichnis Ihrer Wahl
3 Die Umgebungsvariable M2_HOME muss auf dieses Verzeichnis verweisen undder Befehlssuchpfad muss die ausfuumlhrbaren Maven-Befehle kennen UnterWindows muumlssen Sie dazu mit der Tastenkombination (Auml)+(Pause) die Syste-meigenschaften aufrufen und dann auf dem Reiter ERWEITERT die SchaltflaumlcheUMGEBUNGSVARIABLEN auswaumlhlen Fuumlgen Sie unter BENUTZERVARIABLEN mit-tels NEU die Variable M2_HOME hinzu Fuumlgen Sie auszligerdem der Variablen PATHdas Verzeichnis M2_HOMEbin hinzu Legen Sie dazu eine neue Variable PATHan und weisen Sie ihr den Wert M2_HOMEbinPATH zu
Unter nix-Systemen werden die Variablenzuweisungen in einer Konsole ein-gegeben
Mit Hilfe des Befehls mvn --version kann gepruumlft werden ob die Installationerfolgreich war
export M2_HOME=usrlocalapache-maven-303
export PATH=$M2_HOME$PATH
Dgtmvn --version
Apache Maven 303 (r1075438 2011-02-28 183109+0100)
Maven home CProgrammeApacheapache-maven-303
Java version 160_23 vendor Sun Microsystems Inc
Java home CProgrammeJavajdk160_23jre
Default locale de_DE platform encoding Cp1252
OS name windows xp version 51 arch x86 family windowsMaven
Maven_9118-8book Seite 30 Dienstag 12 Juli 2011 443 16
24Projekt erstellen
31
Falls der Rechner hinter einer Firewall liegt muss noch die Datei settingsxmlerstellt werden die im Home-Verzeichnis des Users liegt ~m2 unter UnixMacbzw CDokumente und EinstellungenUSERNAMEm2 unter Windows-Sys-temen
Maven verwaltet alle Plugins und Abhaumlngigkeiten wie JARs in einem Verzeichnisdas als lokales Repository bezeichnet wird Standardmaumlszligig wird dieses Repositoryebenfalls im ~m2-Verzeichnis erstellt Sollte Ihr Benutzer-Profil auf einem Ser-ver gespeichert werden empfiehlt es sich ein anderes Verzeichnis fuumlr das lokaleRepository anzugeben Diese Einstellung wird ebenfalls in der Datei set-tingsxml vorgenommen
24 Projekt erstellen
Um ein erstes Projekt zu generieren wird das Archetype-Plugin aufgerufen
Dieser Aufruf erstellt im aktuellen Verzeichnis ein Unterverzeichnis beispiel-projekt das ein rudimentaumlres Java-Projekt enthaumllt bestehend aus einer Projekt-beschreibungsdatei einer Java-Klasse und dem dazugehoumlrigen JUnit-Test
ltsettingsgt
ltproxiesgt
ltproxygt
ltactivegttrueltactivegt
ltprotocolgthttpltprotocolgt
lthostgtPROXYHOSTlthostgt
ltportgtPROXYPORTltportgt
ltnonProxyHostsgtlocalhost|zaphod|ltnonProxyHostsgt
ltproxygt
ltsettingsgt
ltsettingsgt
ltlocalRepositorygtDjavaMaven2repositoryltlocalRepositorygt
ltsettingsgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiel
-DartifactId=beispiel-projekt
Maven_9118-8book Seite 31 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

27
Kapitel 2
Maven im Uumlberblick
Dieses Kapitel beschreibt wie Maven installiert und ein erstes Projekt erstelltwird Anhand dieses Projekts werden die wichtigsten Maven-Aufrufe gezeigt Aufdie detaillierte Beschreibung in spaumlteren Kapiteln wird entsprechend verwiesen
21 Was ist Maven
Maven ist ein deklaratives Build Management System Das heiszligt es wird lediglichder Inhalt des Projekts beschrieben nicht die Struktur oder die Ablaumlufe die zurKompilierung und Veroumlffentlichung notwendig sind Die Philosophie hinterMaven heiszligt Konvention uumlber Konfiguration ndash Strukturen muumlssen nicht definiertwerden sondern sind vorgegeben So wie die Projekt- und Verzeichnisstruktur istauch die Reihenfolge der Arbeitsschritte vorgegeben die Maven ausfuumlhrt um einProjekt zu bauen In der pomxml von Maven 209 beschreiben die EntwicklerMaven so
Maven is a project development management and comprehension tool Basedon the concept of a project object model builds dependency managementdocumentation creation site publication and distribution publication are allcontrolled from the declarative file Maven can be extended by plugins to utilisea number of other development tools for reporting or the build process
211 POM
Maven verwendet ein Projektmodell (POM ndash Project Object Model) um Abhaumlngig-keiten Projektumgebung und Projektbeziehungen zu speichern Das Projektmo-dell wird in der Datei pomxml gespeichert und ist vererbbar
Hinweis
Maven verwendet fuumlr alle Aufgaben Plugins die beim ersten Aufruf aus demNetz geladen werden muumlssen Wundern Sie sich also nicht wenn die ersten Auf-rufe etwas laumlnger dauern Da das Herunterladen der Bibliotheken auf der Kon-sole protokolliert wird gehen beim ersten Aufruf eines Befehls die wesentlichenInformationen schnell unter Rufen Sie zur Not den Befehl einfach noch mal aufGegebenenfalls rufen Sie vorher mvn clean auf um generierte Dateien zuloumlschen
Maven_9118-8book Seite 27 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
28
212 Lebenszyklen
Die Entwickler von Maven gehen von immer wiederkehrenden Ablaumlufen in Pro-jekten aus die in so genannten Lebenszyklen (Lifecycles) abgebildet werden DerStandardzyklus ist der Build-Lifecycle der aus einer festen Abfolge von Phasenbesteht Die einzelnen Phasen koumlnnen mit Plugins verknuumlpft werden die mit derPhase ausgefuumlhrt werden Wird eine Phase aufgerufen zum Beispiel test wer-den alle Phasen des Zyklus die vor test liegen abgearbeitet Das heiszligt um Testsauszufuumlhren werden immer alle notwendigen Schritte ausgefuumlhrt
1 Kompilieren des Produktivcodes
2 Kompilieren des Testcodes
3 Ausfuumlhren der Tests
213 Vereinfachtes Build-Management
Durch die Verwendung einheitlicher Verzeichnisstrukturen ist es einfach in Pro-jekte einzusteigen die mit Maven verwaltet werden Der Build-Lifecycle kapselt dieeinzelnen Phasen die langwierige Analyse von Makefiles oder Build-Skripten umherauszufinden welcher Befehl als Erstes aufgerufen werden muss entfaumlllt
214 Trennung von Code und Unit-Tests
Maven trennt den produktiven Projektcode physisch vom Code der Unit-Tests DieCode-Basen liegen parallel in unterschiedlichen Quell-Verzeichnissen und diekompilierten Klassen werden in unterschiedlichen Verzeichnissen verwaltetGenauso sind die Konfiguration der Unit-Tests und die dazugehoumlrigen Ressourcenvom restlichen Code getrennt
215 Verwaltung von Abhaumlngigkeiten
Maven verwendet ein einziges lokales Verzeichnis genannt Repository in demBibliotheken zentral fuumlr alle Projekte abgelegt werden Benoumltigte Bibliothekenwerden selbststaumlndig ins lokale Repository kopiert und aktualisiert Damit eruumlbrigtsich die Notwendigkeit in Projekten Bibliotheken in das Versionskontrollsystemeinchecken zu muumlssen Transitive Abhaumlngigkeiten also die Abhaumlngigkeiten vonAbhaumlngigkeiten werden selbststaumlndig analysiert und aufgeloumlst Unter Maven ist esdaher sehr einfach Bibliotheken auszutauschen Auch das Entfernen von Abhaumln-gigkeiten aus Projekten wird deutlich einfacher Verschwindet die Abhaumlngigkeitverschwinden auch die transitiven Abhaumlngigkeiten Es bleiben keine Dateileichenzuruumlck
Maven_9118-8book Seite 28 Dienstag 12 Juli 2011 443 16
22Voraussetzungen
29
216 Artefakte
Maven beschreibt genau genommen keine vollstaumlndigen Projekte sondern Arte-fakte eigenstaumlndige Teile eines Projekts die einzeln ausgeliefert werden koumlnnenIn kleinen Projekten laumlsst sich das gesamte Projekt mit einem einzigen Artefaktbeschreiben Ein Artefakt wird durch eindeutige Koordinaten beschrieben die imPOM abgelegt sind Jedes Maven-Projekt erzeugt ein Artefakt
217 Informationen zu Codequalitaumlt und Projektzustand
Mit Maven lassen sich Reports und Projektinformationen generieren die in einerProjektwebseite zusammengefasst werden Hierzu gehoumlren unter anderem
API-Dokumentation
Unit-Test-Ergebnisse und Testabdeckung
Changelogs des Versionskontrollsystems
Liste der Abhaumlngigkeiten
Reports zur Codequalitaumlt durch Tools wie PMD Checkstyle und FindBugs
Informationen zu Bug-Tracking Mailing-Listen und Continuous Integration
Verwendete Bibliotheken und deren Benutzung
22 Voraussetzungen
221 Betriebssystem
Maven laumluft auf Windows-Systemen ab NT Mac OS X- und Linux-Systemen Per-soumlnlich verwendet habe ich Maven auf Windows 2000 (SP4) XP (SP2 und 3) sowieSUSE Linux 9 und Ubuntu 7x und 8x
222 JDK
Maven benoumltigt zur Ausfuumlhrung ein JDK ab Version 15 Es ist aber moumlglich mitMaven auch Java-Projekte fuumlr aumlltere JDKs zu verwalten Die UmgebungsvariableJAVA_HOME muss auf das Java-Installationsverzeichnis verweisen
223 Speicherplatz
Arbeitsspeicher
Es ist keine Mindestanforderung fuumlr Arbeitsspeicher angegeben Mit den heuteuumlblichen Speichergroumlszligen sollte es auch keine Probleme geben Maven 209 liefauf einem Ubuntu 704-System mit 512 MB RAM und Java5 ohne Probleme Dasmag sich bei groszligen Projekten vor allem beim Generieren der Site aber andersverhalten
Maven_9118-8book Seite 29 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
30
Festplatte
Maven 303 selber benoumltigt etwa 3 MB auf der Festplatte Fuumlr das lokale Repositorykann dann je nach Projekten einiges an Speicher dazukommen Auf der Maven-Homepage sind 100 MB als Richtwert angegeben auf meinem Arbeitsrechnersind allerdings mehr als 330 MB durch das Repository belegt (ich habe in den letz-ten Monaten allerdings auch reichlich Plugins ausprobiert hellip)
23 Installation
Um Maven zu installieren sind folgende Schritte notwendig
1 Laden Sie Maven vom Apache-Server herunter httpmavenapacheorgdownloadhtml
Verfuumlgbar sind die Formate zip targz und tarbz2
2 Entpacken Sie Maven in ein Verzeichnis Ihrer Wahl
3 Die Umgebungsvariable M2_HOME muss auf dieses Verzeichnis verweisen undder Befehlssuchpfad muss die ausfuumlhrbaren Maven-Befehle kennen UnterWindows muumlssen Sie dazu mit der Tastenkombination (Auml)+(Pause) die Syste-meigenschaften aufrufen und dann auf dem Reiter ERWEITERT die SchaltflaumlcheUMGEBUNGSVARIABLEN auswaumlhlen Fuumlgen Sie unter BENUTZERVARIABLEN mit-tels NEU die Variable M2_HOME hinzu Fuumlgen Sie auszligerdem der Variablen PATHdas Verzeichnis M2_HOMEbin hinzu Legen Sie dazu eine neue Variable PATHan und weisen Sie ihr den Wert M2_HOMEbinPATH zu
Unter nix-Systemen werden die Variablenzuweisungen in einer Konsole ein-gegeben
Mit Hilfe des Befehls mvn --version kann gepruumlft werden ob die Installationerfolgreich war
export M2_HOME=usrlocalapache-maven-303
export PATH=$M2_HOME$PATH
Dgtmvn --version
Apache Maven 303 (r1075438 2011-02-28 183109+0100)
Maven home CProgrammeApacheapache-maven-303
Java version 160_23 vendor Sun Microsystems Inc
Java home CProgrammeJavajdk160_23jre
Default locale de_DE platform encoding Cp1252
OS name windows xp version 51 arch x86 family windowsMaven
Maven_9118-8book Seite 30 Dienstag 12 Juli 2011 443 16
24Projekt erstellen
31
Falls der Rechner hinter einer Firewall liegt muss noch die Datei settingsxmlerstellt werden die im Home-Verzeichnis des Users liegt ~m2 unter UnixMacbzw CDokumente und EinstellungenUSERNAMEm2 unter Windows-Sys-temen
Maven verwaltet alle Plugins und Abhaumlngigkeiten wie JARs in einem Verzeichnisdas als lokales Repository bezeichnet wird Standardmaumlszligig wird dieses Repositoryebenfalls im ~m2-Verzeichnis erstellt Sollte Ihr Benutzer-Profil auf einem Ser-ver gespeichert werden empfiehlt es sich ein anderes Verzeichnis fuumlr das lokaleRepository anzugeben Diese Einstellung wird ebenfalls in der Datei set-tingsxml vorgenommen
24 Projekt erstellen
Um ein erstes Projekt zu generieren wird das Archetype-Plugin aufgerufen
Dieser Aufruf erstellt im aktuellen Verzeichnis ein Unterverzeichnis beispiel-projekt das ein rudimentaumlres Java-Projekt enthaumllt bestehend aus einer Projekt-beschreibungsdatei einer Java-Klasse und dem dazugehoumlrigen JUnit-Test
ltsettingsgt
ltproxiesgt
ltproxygt
ltactivegttrueltactivegt
ltprotocolgthttpltprotocolgt
lthostgtPROXYHOSTlthostgt
ltportgtPROXYPORTltportgt
ltnonProxyHostsgtlocalhost|zaphod|ltnonProxyHostsgt
ltproxygt
ltsettingsgt
ltsettingsgt
ltlocalRepositorygtDjavaMaven2repositoryltlocalRepositorygt
ltsettingsgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiel
-DartifactId=beispiel-projekt
Maven_9118-8book Seite 31 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
28
212 Lebenszyklen
Die Entwickler von Maven gehen von immer wiederkehrenden Ablaumlufen in Pro-jekten aus die in so genannten Lebenszyklen (Lifecycles) abgebildet werden DerStandardzyklus ist der Build-Lifecycle der aus einer festen Abfolge von Phasenbesteht Die einzelnen Phasen koumlnnen mit Plugins verknuumlpft werden die mit derPhase ausgefuumlhrt werden Wird eine Phase aufgerufen zum Beispiel test wer-den alle Phasen des Zyklus die vor test liegen abgearbeitet Das heiszligt um Testsauszufuumlhren werden immer alle notwendigen Schritte ausgefuumlhrt
1 Kompilieren des Produktivcodes
2 Kompilieren des Testcodes
3 Ausfuumlhren der Tests
213 Vereinfachtes Build-Management
Durch die Verwendung einheitlicher Verzeichnisstrukturen ist es einfach in Pro-jekte einzusteigen die mit Maven verwaltet werden Der Build-Lifecycle kapselt dieeinzelnen Phasen die langwierige Analyse von Makefiles oder Build-Skripten umherauszufinden welcher Befehl als Erstes aufgerufen werden muss entfaumlllt
214 Trennung von Code und Unit-Tests
Maven trennt den produktiven Projektcode physisch vom Code der Unit-Tests DieCode-Basen liegen parallel in unterschiedlichen Quell-Verzeichnissen und diekompilierten Klassen werden in unterschiedlichen Verzeichnissen verwaltetGenauso sind die Konfiguration der Unit-Tests und die dazugehoumlrigen Ressourcenvom restlichen Code getrennt
215 Verwaltung von Abhaumlngigkeiten
Maven verwendet ein einziges lokales Verzeichnis genannt Repository in demBibliotheken zentral fuumlr alle Projekte abgelegt werden Benoumltigte Bibliothekenwerden selbststaumlndig ins lokale Repository kopiert und aktualisiert Damit eruumlbrigtsich die Notwendigkeit in Projekten Bibliotheken in das Versionskontrollsystemeinchecken zu muumlssen Transitive Abhaumlngigkeiten also die Abhaumlngigkeiten vonAbhaumlngigkeiten werden selbststaumlndig analysiert und aufgeloumlst Unter Maven ist esdaher sehr einfach Bibliotheken auszutauschen Auch das Entfernen von Abhaumln-gigkeiten aus Projekten wird deutlich einfacher Verschwindet die Abhaumlngigkeitverschwinden auch die transitiven Abhaumlngigkeiten Es bleiben keine Dateileichenzuruumlck
Maven_9118-8book Seite 28 Dienstag 12 Juli 2011 443 16
22Voraussetzungen
29
216 Artefakte
Maven beschreibt genau genommen keine vollstaumlndigen Projekte sondern Arte-fakte eigenstaumlndige Teile eines Projekts die einzeln ausgeliefert werden koumlnnenIn kleinen Projekten laumlsst sich das gesamte Projekt mit einem einzigen Artefaktbeschreiben Ein Artefakt wird durch eindeutige Koordinaten beschrieben die imPOM abgelegt sind Jedes Maven-Projekt erzeugt ein Artefakt
217 Informationen zu Codequalitaumlt und Projektzustand
Mit Maven lassen sich Reports und Projektinformationen generieren die in einerProjektwebseite zusammengefasst werden Hierzu gehoumlren unter anderem
API-Dokumentation
Unit-Test-Ergebnisse und Testabdeckung
Changelogs des Versionskontrollsystems
Liste der Abhaumlngigkeiten
Reports zur Codequalitaumlt durch Tools wie PMD Checkstyle und FindBugs
Informationen zu Bug-Tracking Mailing-Listen und Continuous Integration
Verwendete Bibliotheken und deren Benutzung
22 Voraussetzungen
221 Betriebssystem
Maven laumluft auf Windows-Systemen ab NT Mac OS X- und Linux-Systemen Per-soumlnlich verwendet habe ich Maven auf Windows 2000 (SP4) XP (SP2 und 3) sowieSUSE Linux 9 und Ubuntu 7x und 8x
222 JDK
Maven benoumltigt zur Ausfuumlhrung ein JDK ab Version 15 Es ist aber moumlglich mitMaven auch Java-Projekte fuumlr aumlltere JDKs zu verwalten Die UmgebungsvariableJAVA_HOME muss auf das Java-Installationsverzeichnis verweisen
223 Speicherplatz
Arbeitsspeicher
Es ist keine Mindestanforderung fuumlr Arbeitsspeicher angegeben Mit den heuteuumlblichen Speichergroumlszligen sollte es auch keine Probleme geben Maven 209 liefauf einem Ubuntu 704-System mit 512 MB RAM und Java5 ohne Probleme Dasmag sich bei groszligen Projekten vor allem beim Generieren der Site aber andersverhalten
Maven_9118-8book Seite 29 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
30
Festplatte
Maven 303 selber benoumltigt etwa 3 MB auf der Festplatte Fuumlr das lokale Repositorykann dann je nach Projekten einiges an Speicher dazukommen Auf der Maven-Homepage sind 100 MB als Richtwert angegeben auf meinem Arbeitsrechnersind allerdings mehr als 330 MB durch das Repository belegt (ich habe in den letz-ten Monaten allerdings auch reichlich Plugins ausprobiert hellip)
23 Installation
Um Maven zu installieren sind folgende Schritte notwendig
1 Laden Sie Maven vom Apache-Server herunter httpmavenapacheorgdownloadhtml
Verfuumlgbar sind die Formate zip targz und tarbz2
2 Entpacken Sie Maven in ein Verzeichnis Ihrer Wahl
3 Die Umgebungsvariable M2_HOME muss auf dieses Verzeichnis verweisen undder Befehlssuchpfad muss die ausfuumlhrbaren Maven-Befehle kennen UnterWindows muumlssen Sie dazu mit der Tastenkombination (Auml)+(Pause) die Syste-meigenschaften aufrufen und dann auf dem Reiter ERWEITERT die SchaltflaumlcheUMGEBUNGSVARIABLEN auswaumlhlen Fuumlgen Sie unter BENUTZERVARIABLEN mit-tels NEU die Variable M2_HOME hinzu Fuumlgen Sie auszligerdem der Variablen PATHdas Verzeichnis M2_HOMEbin hinzu Legen Sie dazu eine neue Variable PATHan und weisen Sie ihr den Wert M2_HOMEbinPATH zu
Unter nix-Systemen werden die Variablenzuweisungen in einer Konsole ein-gegeben
Mit Hilfe des Befehls mvn --version kann gepruumlft werden ob die Installationerfolgreich war
export M2_HOME=usrlocalapache-maven-303
export PATH=$M2_HOME$PATH
Dgtmvn --version
Apache Maven 303 (r1075438 2011-02-28 183109+0100)
Maven home CProgrammeApacheapache-maven-303
Java version 160_23 vendor Sun Microsystems Inc
Java home CProgrammeJavajdk160_23jre
Default locale de_DE platform encoding Cp1252
OS name windows xp version 51 arch x86 family windowsMaven
Maven_9118-8book Seite 30 Dienstag 12 Juli 2011 443 16
24Projekt erstellen
31
Falls der Rechner hinter einer Firewall liegt muss noch die Datei settingsxmlerstellt werden die im Home-Verzeichnis des Users liegt ~m2 unter UnixMacbzw CDokumente und EinstellungenUSERNAMEm2 unter Windows-Sys-temen
Maven verwaltet alle Plugins und Abhaumlngigkeiten wie JARs in einem Verzeichnisdas als lokales Repository bezeichnet wird Standardmaumlszligig wird dieses Repositoryebenfalls im ~m2-Verzeichnis erstellt Sollte Ihr Benutzer-Profil auf einem Ser-ver gespeichert werden empfiehlt es sich ein anderes Verzeichnis fuumlr das lokaleRepository anzugeben Diese Einstellung wird ebenfalls in der Datei set-tingsxml vorgenommen
24 Projekt erstellen
Um ein erstes Projekt zu generieren wird das Archetype-Plugin aufgerufen
Dieser Aufruf erstellt im aktuellen Verzeichnis ein Unterverzeichnis beispiel-projekt das ein rudimentaumlres Java-Projekt enthaumllt bestehend aus einer Projekt-beschreibungsdatei einer Java-Klasse und dem dazugehoumlrigen JUnit-Test
ltsettingsgt
ltproxiesgt
ltproxygt
ltactivegttrueltactivegt
ltprotocolgthttpltprotocolgt
lthostgtPROXYHOSTlthostgt
ltportgtPROXYPORTltportgt
ltnonProxyHostsgtlocalhost|zaphod|ltnonProxyHostsgt
ltproxygt
ltsettingsgt
ltsettingsgt
ltlocalRepositorygtDjavaMaven2repositoryltlocalRepositorygt
ltsettingsgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiel
-DartifactId=beispiel-projekt
Maven_9118-8book Seite 31 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

22Voraussetzungen
29
216 Artefakte
Maven beschreibt genau genommen keine vollstaumlndigen Projekte sondern Arte-fakte eigenstaumlndige Teile eines Projekts die einzeln ausgeliefert werden koumlnnenIn kleinen Projekten laumlsst sich das gesamte Projekt mit einem einzigen Artefaktbeschreiben Ein Artefakt wird durch eindeutige Koordinaten beschrieben die imPOM abgelegt sind Jedes Maven-Projekt erzeugt ein Artefakt
217 Informationen zu Codequalitaumlt und Projektzustand
Mit Maven lassen sich Reports und Projektinformationen generieren die in einerProjektwebseite zusammengefasst werden Hierzu gehoumlren unter anderem
API-Dokumentation
Unit-Test-Ergebnisse und Testabdeckung
Changelogs des Versionskontrollsystems
Liste der Abhaumlngigkeiten
Reports zur Codequalitaumlt durch Tools wie PMD Checkstyle und FindBugs
Informationen zu Bug-Tracking Mailing-Listen und Continuous Integration
Verwendete Bibliotheken und deren Benutzung
22 Voraussetzungen
221 Betriebssystem
Maven laumluft auf Windows-Systemen ab NT Mac OS X- und Linux-Systemen Per-soumlnlich verwendet habe ich Maven auf Windows 2000 (SP4) XP (SP2 und 3) sowieSUSE Linux 9 und Ubuntu 7x und 8x
222 JDK
Maven benoumltigt zur Ausfuumlhrung ein JDK ab Version 15 Es ist aber moumlglich mitMaven auch Java-Projekte fuumlr aumlltere JDKs zu verwalten Die UmgebungsvariableJAVA_HOME muss auf das Java-Installationsverzeichnis verweisen
223 Speicherplatz
Arbeitsspeicher
Es ist keine Mindestanforderung fuumlr Arbeitsspeicher angegeben Mit den heuteuumlblichen Speichergroumlszligen sollte es auch keine Probleme geben Maven 209 liefauf einem Ubuntu 704-System mit 512 MB RAM und Java5 ohne Probleme Dasmag sich bei groszligen Projekten vor allem beim Generieren der Site aber andersverhalten
Maven_9118-8book Seite 29 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
30
Festplatte
Maven 303 selber benoumltigt etwa 3 MB auf der Festplatte Fuumlr das lokale Repositorykann dann je nach Projekten einiges an Speicher dazukommen Auf der Maven-Homepage sind 100 MB als Richtwert angegeben auf meinem Arbeitsrechnersind allerdings mehr als 330 MB durch das Repository belegt (ich habe in den letz-ten Monaten allerdings auch reichlich Plugins ausprobiert hellip)
23 Installation
Um Maven zu installieren sind folgende Schritte notwendig
1 Laden Sie Maven vom Apache-Server herunter httpmavenapacheorgdownloadhtml
Verfuumlgbar sind die Formate zip targz und tarbz2
2 Entpacken Sie Maven in ein Verzeichnis Ihrer Wahl
3 Die Umgebungsvariable M2_HOME muss auf dieses Verzeichnis verweisen undder Befehlssuchpfad muss die ausfuumlhrbaren Maven-Befehle kennen UnterWindows muumlssen Sie dazu mit der Tastenkombination (Auml)+(Pause) die Syste-meigenschaften aufrufen und dann auf dem Reiter ERWEITERT die SchaltflaumlcheUMGEBUNGSVARIABLEN auswaumlhlen Fuumlgen Sie unter BENUTZERVARIABLEN mit-tels NEU die Variable M2_HOME hinzu Fuumlgen Sie auszligerdem der Variablen PATHdas Verzeichnis M2_HOMEbin hinzu Legen Sie dazu eine neue Variable PATHan und weisen Sie ihr den Wert M2_HOMEbinPATH zu
Unter nix-Systemen werden die Variablenzuweisungen in einer Konsole ein-gegeben
Mit Hilfe des Befehls mvn --version kann gepruumlft werden ob die Installationerfolgreich war
export M2_HOME=usrlocalapache-maven-303
export PATH=$M2_HOME$PATH
Dgtmvn --version
Apache Maven 303 (r1075438 2011-02-28 183109+0100)
Maven home CProgrammeApacheapache-maven-303
Java version 160_23 vendor Sun Microsystems Inc
Java home CProgrammeJavajdk160_23jre
Default locale de_DE platform encoding Cp1252
OS name windows xp version 51 arch x86 family windowsMaven
Maven_9118-8book Seite 30 Dienstag 12 Juli 2011 443 16
24Projekt erstellen
31
Falls der Rechner hinter einer Firewall liegt muss noch die Datei settingsxmlerstellt werden die im Home-Verzeichnis des Users liegt ~m2 unter UnixMacbzw CDokumente und EinstellungenUSERNAMEm2 unter Windows-Sys-temen
Maven verwaltet alle Plugins und Abhaumlngigkeiten wie JARs in einem Verzeichnisdas als lokales Repository bezeichnet wird Standardmaumlszligig wird dieses Repositoryebenfalls im ~m2-Verzeichnis erstellt Sollte Ihr Benutzer-Profil auf einem Ser-ver gespeichert werden empfiehlt es sich ein anderes Verzeichnis fuumlr das lokaleRepository anzugeben Diese Einstellung wird ebenfalls in der Datei set-tingsxml vorgenommen
24 Projekt erstellen
Um ein erstes Projekt zu generieren wird das Archetype-Plugin aufgerufen
Dieser Aufruf erstellt im aktuellen Verzeichnis ein Unterverzeichnis beispiel-projekt das ein rudimentaumlres Java-Projekt enthaumllt bestehend aus einer Projekt-beschreibungsdatei einer Java-Klasse und dem dazugehoumlrigen JUnit-Test
ltsettingsgt
ltproxiesgt
ltproxygt
ltactivegttrueltactivegt
ltprotocolgthttpltprotocolgt
lthostgtPROXYHOSTlthostgt
ltportgtPROXYPORTltportgt
ltnonProxyHostsgtlocalhost|zaphod|ltnonProxyHostsgt
ltproxygt
ltsettingsgt
ltsettingsgt
ltlocalRepositorygtDjavaMaven2repositoryltlocalRepositorygt
ltsettingsgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiel
-DartifactId=beispiel-projekt
Maven_9118-8book Seite 31 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
30
Festplatte
Maven 303 selber benoumltigt etwa 3 MB auf der Festplatte Fuumlr das lokale Repositorykann dann je nach Projekten einiges an Speicher dazukommen Auf der Maven-Homepage sind 100 MB als Richtwert angegeben auf meinem Arbeitsrechnersind allerdings mehr als 330 MB durch das Repository belegt (ich habe in den letz-ten Monaten allerdings auch reichlich Plugins ausprobiert hellip)
23 Installation
Um Maven zu installieren sind folgende Schritte notwendig
1 Laden Sie Maven vom Apache-Server herunter httpmavenapacheorgdownloadhtml
Verfuumlgbar sind die Formate zip targz und tarbz2
2 Entpacken Sie Maven in ein Verzeichnis Ihrer Wahl
3 Die Umgebungsvariable M2_HOME muss auf dieses Verzeichnis verweisen undder Befehlssuchpfad muss die ausfuumlhrbaren Maven-Befehle kennen UnterWindows muumlssen Sie dazu mit der Tastenkombination (Auml)+(Pause) die Syste-meigenschaften aufrufen und dann auf dem Reiter ERWEITERT die SchaltflaumlcheUMGEBUNGSVARIABLEN auswaumlhlen Fuumlgen Sie unter BENUTZERVARIABLEN mit-tels NEU die Variable M2_HOME hinzu Fuumlgen Sie auszligerdem der Variablen PATHdas Verzeichnis M2_HOMEbin hinzu Legen Sie dazu eine neue Variable PATHan und weisen Sie ihr den Wert M2_HOMEbinPATH zu
Unter nix-Systemen werden die Variablenzuweisungen in einer Konsole ein-gegeben
Mit Hilfe des Befehls mvn --version kann gepruumlft werden ob die Installationerfolgreich war
export M2_HOME=usrlocalapache-maven-303
export PATH=$M2_HOME$PATH
Dgtmvn --version
Apache Maven 303 (r1075438 2011-02-28 183109+0100)
Maven home CProgrammeApacheapache-maven-303
Java version 160_23 vendor Sun Microsystems Inc
Java home CProgrammeJavajdk160_23jre
Default locale de_DE platform encoding Cp1252
OS name windows xp version 51 arch x86 family windowsMaven
Maven_9118-8book Seite 30 Dienstag 12 Juli 2011 443 16
24Projekt erstellen
31
Falls der Rechner hinter einer Firewall liegt muss noch die Datei settingsxmlerstellt werden die im Home-Verzeichnis des Users liegt ~m2 unter UnixMacbzw CDokumente und EinstellungenUSERNAMEm2 unter Windows-Sys-temen
Maven verwaltet alle Plugins und Abhaumlngigkeiten wie JARs in einem Verzeichnisdas als lokales Repository bezeichnet wird Standardmaumlszligig wird dieses Repositoryebenfalls im ~m2-Verzeichnis erstellt Sollte Ihr Benutzer-Profil auf einem Ser-ver gespeichert werden empfiehlt es sich ein anderes Verzeichnis fuumlr das lokaleRepository anzugeben Diese Einstellung wird ebenfalls in der Datei set-tingsxml vorgenommen
24 Projekt erstellen
Um ein erstes Projekt zu generieren wird das Archetype-Plugin aufgerufen
Dieser Aufruf erstellt im aktuellen Verzeichnis ein Unterverzeichnis beispiel-projekt das ein rudimentaumlres Java-Projekt enthaumllt bestehend aus einer Projekt-beschreibungsdatei einer Java-Klasse und dem dazugehoumlrigen JUnit-Test
ltsettingsgt
ltproxiesgt
ltproxygt
ltactivegttrueltactivegt
ltprotocolgthttpltprotocolgt
lthostgtPROXYHOSTlthostgt
ltportgtPROXYPORTltportgt
ltnonProxyHostsgtlocalhost|zaphod|ltnonProxyHostsgt
ltproxygt
ltsettingsgt
ltsettingsgt
ltlocalRepositorygtDjavaMaven2repositoryltlocalRepositorygt
ltsettingsgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiel
-DartifactId=beispiel-projekt
Maven_9118-8book Seite 31 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

24Projekt erstellen
31
Falls der Rechner hinter einer Firewall liegt muss noch die Datei settingsxmlerstellt werden die im Home-Verzeichnis des Users liegt ~m2 unter UnixMacbzw CDokumente und EinstellungenUSERNAMEm2 unter Windows-Sys-temen
Maven verwaltet alle Plugins und Abhaumlngigkeiten wie JARs in einem Verzeichnisdas als lokales Repository bezeichnet wird Standardmaumlszligig wird dieses Repositoryebenfalls im ~m2-Verzeichnis erstellt Sollte Ihr Benutzer-Profil auf einem Ser-ver gespeichert werden empfiehlt es sich ein anderes Verzeichnis fuumlr das lokaleRepository anzugeben Diese Einstellung wird ebenfalls in der Datei set-tingsxml vorgenommen
24 Projekt erstellen
Um ein erstes Projekt zu generieren wird das Archetype-Plugin aufgerufen
Dieser Aufruf erstellt im aktuellen Verzeichnis ein Unterverzeichnis beispiel-projekt das ein rudimentaumlres Java-Projekt enthaumllt bestehend aus einer Projekt-beschreibungsdatei einer Java-Klasse und dem dazugehoumlrigen JUnit-Test
ltsettingsgt
ltproxiesgt
ltproxygt
ltactivegttrueltactivegt
ltprotocolgthttpltprotocolgt
lthostgtPROXYHOSTlthostgt
ltportgtPROXYPORTltportgt
ltnonProxyHostsgtlocalhost|zaphod|ltnonProxyHostsgt
ltproxygt
ltsettingsgt
ltsettingsgt
ltlocalRepositorygtDjavaMaven2repositoryltlocalRepositorygt
ltsettingsgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiel
-DartifactId=beispiel-projekt
Maven_9118-8book Seite 31 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
32
Abb 21 Verzeichnisstruktur des Beispiel-Projekts
Die angegebene groupId wurde als Vorgabe fuumlr die Java-Paket-Struktur verwen-det
Die Projektbeschreibungsdatei pomxml enthaumllt neben den eben angegebenenWerten auch die automatisch vergebene Version 10-SNAPSHOT denpackaging-Typ jar der angibt dass das Projekt als Standard-Java-Archiv gepacktwerden soll sowie JUnit als einzige Abhaumlngigkeit
ltproject
xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispielltgroupIdgt
ltartifactIdgtbeispiel-projektltartifactIdgt
ltpackaginggtjarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtbeispiel-projektltnamegt
lturlgthttpmavenapacheorglturlgt
ltpropertiesgt
ltprojectbuildsourceEncodinggtUTF-8ltprojectbuildsourceEncodinggt
ltpropertiesgt
ltdependenciesgt
Maven_9118-8book Seite 32 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

25Bauen ndash Testen ndash Packen
33
25 Bauen ndash Testen ndash Packen
251 Basisfunktionen
Kompilieren
Wechseln Sie in das Verzeichnis und kompilieren Sie die Sourcen
Maven erstellt nun den Zielordner targetclasses und kompiliert die Klasseaus dem Source-Pfad srcmainjava in dieses Verzeichnis Auf der Kommando-zeile sieht das Ergebnis so aus
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
Hinweis
Eventuell ist Ihnen beim Aufruf von mvn archetypecreate folgende Warnungin der Maven-Ausgabe auf der Konsole aufgefallen
[WARNING] This goal is deprecated Please use mvn archetypegenerateinstead
Das sollte Sie allerdings nicht weiter beunruhigen Da die Erzeugung eines Stan-dard-Java-Projekts mit archetypecreate so bequem ist ignorieren wir dieWarnung an dieser Stelle einfach Das Goal archetypegenerate wird inAbschnitt 28 erlaumlutert
mvn compile
Dbeispiel-projektgtmvn compile
[INFO] Scanning for projects
[INFO]
[INFO] -----------------------------------------------------------------
[INFO] Building beispiel-projekt 10-SNAPSHOT
[INFO] -----------------------------------------------------------------
Maven_9118-8book Seite 33 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
34
[INFO]
[INFO] --- maven-resources-plugin243resources (default-resources) beispiel-projekt ---
[INFO] Using UTF-8 encoding to copy filtered resources
[INFO] skip non existing resourceDirectory DProjektemavenbuch2beispiel-projektsrcmainresources
[INFO]
[INFO] --- maven-compiler-plugin232compile (default-compile) beispiel-projekt ---
[INFO] Compiling 1 source file to DProjektemavenbuch2beispiel-projekttargetclasses
[INFO] -----------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time 1125s
[INFO] Finished at Sun Jan 30 092833 CET 2011
[INFO] Final Memory 5M15M
[INFO] -----------------------------------------------------------[INFO]
Wichtig
Das Uumlbersetzen des Codes wird durch das Maven-Compiler-Plugin durchge-fuumlhrt Die Standardeinstellung fuumlr die Versionen von Sourcen und kompiliertenKlassen ist 15 Fuumlr aumlltere Versionen des Compiler-Plugins war aus Kompatibili-taumltsgruumlnden die Voreinstellung fuumlr Source-Code Version 13 fuumlr die kompiliertenKlassen Version 11 Wollen Sie die Features einer aktuelleren Java-Version nut-zen muumlssen Sie das Compiler-Plugin in der build-Sektion des POM entspre-chend konfigurieren
ltprojectgtltbuildgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-compiler-pluginltartifactIdgtltconfigurationgt
ltsourcegt16ltsourcegtlttargetgt16lttargetgt
ltconfigurationgtltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 34 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

25Bauen ndash Testen ndash Packen
35
Unit-Tests ausfuumlhren
Um den Unit-Test auszufuumlhren rufen Sie
auf Nun werden folgende Schritte ausgefuumlhrt
1 Der Zielordner targettest-classes wird erstellt der die kompilierten Test-klassen aufnimmt
2 hellip Die Testklassen werden kompiliert
3 hellip und die Unit-Tests werden ausgefuumlhrt
Anschlieszligend erscheint die Ausgabe uumlber den erfolgreichen Durchlauf der Tests
Packen und Installieren
Der Aufruf der Phase package mit
erzeugt ein JAR-Archiv im Ordner target des Projekts
Der Aufruf von
schlieszliglich legt eine Kopie des JAR-Archivs und der Datei pomxml im lokalenRepository ab
Aufraumlumen
Um das Projektverzeichnis aufzuraumlumen sprich das target-Verzeichnis zuloumlschen wird
mvn test
------------------------------------------------------
T E S T S
-------------------------------------------------------
Running demavenbuchbeispielAppTest
Tests run 1 Failures 0 Errors 0 Skipped 0 Time elapsed 0016 sec
Results
Tests run 1 Failures 0 Errors 0 Skipped 0
Running demavenbuchbeispielAppTest
mvn package
mvn install
Maven_9118-8book Seite 35 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
36
aufgerufen
Die Aufrufe lassen sich auch kombinieren So ergibt der Aufruf
ein erneutes Kompilieren und Packen des Projekts nachdem der target-Ordnergeloumlscht wurde Genau genommen ruft mvn package die Phase package desBuild-Zyklus auf Deren Ausfuumlhrung beinhaltet alle notwendigen Schritte vomKompilieren uumlbers Testen bis zur jar-Erzeugung Wie das alles genau zusammen-haumlngt beschreibt Kapitel L
252 Dokumentation
Mit Maven laumlsst sich aus den Informationen der POM eine Sammlung von ver-linkten Webseiten generieren
Rufen Sie
auf und oumlffnen Sie nach Ablauf des Programms die Datei targetsiteindexhtml in einem Browser
mvn clean
mvn clean package
Wichtig
In Maven 3 wurde das Reporting geaumlndert und funktioniert nicht mehr mit den2-Versionen des Reporting-Plugins Daher muumlssen Maven-3-Anwender hierdie Datei pomxml anpassen und eine 3-Version des Reporting-Plugins ange-ben
ltprojectgt
ltbuildgtltpluginManagementgt
ltpluginsgtltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgtltartifactIdgtmaven-site-pluginltartifactIdgtltversiongt30-beta-3ltversiongt
ltplugingtltpluginsgt
ltpluginManagementgtltbuildgt
ltprojectgt
mvn site
Maven_9118-8book Seite 36 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

25Bauen ndash Testen ndash Packen
37
Abb 22 Durch Maven generierte Webseite
Probieren Sie einfach mal die Links im Menuuml auf der linken Seite aus Unter PRO-JECT INFORMATION findet sich zum Beispiel eine Auflistung und Beschreibung dererzeugten Seiten (siehe Abbildung 23)
Abb 23 Projektinformationen in der generierten Webseite
Maven_9118-8book Seite 37 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
38
Sie koumlnnen zusaumltzlich zu den Informationen aus der POM auch verschiedeneReports zu Change-Listen des Versionskontrollsystems Codequalitaumlt und Tester-gebnissen sowie Links in die Javadoc und den Sourcecode generieren lassenZusaumltzlich kann die komplette Projektdokumentation in Gestalt von Dokumentati-onen und FAQs durch Maven generiert werden Um zum Beispiel eine Analysedes Sourcecodes mit PMD durchfuumlhren zu lassen und das Ergebnis in die Webs-eite einzubinden wird die Datei pomxml um eine reporting-Sektion erweitertund das PMD-Plugin dort eingetragen
Kapitel 17 beschreibt die moumlglichen Elemente der von Maven generierten Doku-mentation und ihre Konfiguration Weitere Informationen zur Qualitaumltssicherungmit Maven und zu Werkzeugen wie PMD FindBugs und anderen finden sich inKapitel 18
Javadoc
Der Aufruf
erzeugt aus den Javadoc-Kommentaren im Code die entsprechende API-Doku-mentation des Projekts im Verzeichnis targetsiteapidocs
Soll die Javadoc auch in der generierten Webseite eingebunden werden muss diereporting-Sektion ergaumlnzt und das Javadoc-Plugin dort eingetragen werden
ltprojectgt
ltreportinggt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-pmd-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn javadocjavadoc
ltprojectgt
ltreportinggt
ltpluginsgt
Maven_9118-8book Seite 38 Dienstag 12 Juli 2011 443 16
25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

25Bauen ndash Testen ndash Packen
39
Nach einem weiteren Aufruf von
findet sich nun auf der generierten Webseite
unterhalb von PROJECT INFORMATION ein neuer Link PROJECT REPORTS unter demsich die Punkte JAVADOCS und TEST JAVADOCS befinden
Wie das Javadoc-Tool kann auch das Javadoc-Plugin konfiguriert werden um zumBeispiel eigene Stylesheets oder Doclets zu verwenden
Um durch mvn package auch ein Archiv mit der Schnittstellenbeschreibungerzeugen zu lassen wird die pomxml um folgenden Eintrag ergaumlnzt
ltplugingt
ltgroupIdgtorgapachemavenplugins
ltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltplugingt
ltpluginsgt
ltreportinggt
ltprojectgt
mvn site
targetsiteindexhtml
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-javadoc-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-javadocsltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
Maven_9118-8book Seite 39 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
40
Wird das Projekt nun mit mvn package gebaut so wird ein weiteres Java-Archiverstellt
Analog laumlsst sich mit dem Plugin maven-source-plugin ein Java-Archiv mit denProjektquellen erzeugen
26 Projekte erweitern
Um das erstellte Projekt um Bibliotheken zu erweitern muss ebenfalls die Dateipomxml angepasst werden Nehmen wir an das Logging-Framework Log4J sollverwendet werden Dazu erweitern wir die Sektion dependencies in der Abhaumln-
ltexecutionsgt
ltplugingt
targetbeispiel-programm-10-SNAPSHOT-javadocjar
ltprojectgt
ltbuildgt
ltpluginsgt
ltplugingt
ltgroupIdgtorgapachemavenpluginsltgroupIdgt
ltartifactIdgtmaven-source-pluginltartifactIdgt
ltexecutionsgt
ltexecutiongt
ltidgtattach-sourcesltidgt
ltgoalsgt
ltgoalgtjarltgoalgt
ltgoalsgt
ltexecutiongt
ltexecutionsgt
ltplugingt
Vorsicht
Die so erstellten Archive mit Dokumentation und Quellcode werden beim Auf-ruf von mvn deploy auch auf ein externes Repository kopiert Das ist vielleichtnicht bei allen Projekten unbedingt erwuumlnscht
Maven_9118-8book Seite 40 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

27Ein Web-Projekt
41
gigkeiten des Projekts verwaltet werden In unserem Beispiel-Projekt befindet sichbereits ein Eintrag fuumlr JUnit unter dem wir nun Log4J hinzufuumlgen
Dazu geben wir die Koordinaten der Bibliothek an groupId artifactId undversion Der Eintrag fuumlr JUnit enthaumllt auszligerdem den Eintrag ltscopegttestltscopegt der den Guumlltigkeitsbereich angibt JUnit wird nur fuumlr die Phasen test-compile und test benoumltigt Lassen wir die scope-Angabe weg wird automatischder Guumlltigkeitsbereich compile angenommen Fuumlhren wir nun wieder den Befehlmvn compile aus wird die Datei log4j-1214jar in das Verzeichnis log4jlog4j1214 des lokalen Repositorys heruntergeladen und in unser Projekteingebunden
Mehr zu Abhaumlngigkeiten Guumlltigkeitsbereichen und wie Maven damit umgehterklaumlrt Kapitel 7
27 Ein Web-Projekt
271 Generieren einer Web-Applikation
Mit mvn archetypecreate lassen sich auch andere Arten von Projekten wiezum Beispiel ein Web-Projekt erzeugen
Anstelle der Verzeichnisse srcmainjava und srctestjava stehen hier amAnfang srcmainwebapp und srcmainresources zur Verfuumlgung
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependencygt
ltgroupIdgtlog4jltgroupIdgt
ltartifactIdgtlog4jltartifactIdgt
ltversiongt1214ltversiongt
ltdependencygt
ltdependenciesgt
mvn archetypecreate
-DgroupId=demavenbuchbeispiele
-DartifactId=webapp-beispiel
-DarchetypeArtifactId=maven-archetype-webapp
Maven_9118-8book Seite 41 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
42
Abb 24 Struktur des Web-Projekts
Die generierte pomxml unterscheidet sich in ein paar Punkten von der aus demersten Beispiel
1 Der Eintrag ltpackaginggtwarltpackaginggt gibt an dass ein war-Archiverzeugt werden soll
2 Mit dem Eintrag ltfinalNamegtwebapp-beispielltfinalNamegt wird festge-legt dass als Archivname immer webapp-beispielwar verwendet wirdanstatt der Kombination aus artifactId und Version
ltproject xmlns=httpmavenapacheorgPOM400
xmlnsxsi=httpwwww3org2001XMLSchema-instance
xsischemaLocation=httpmavenapacheorgPOM400
httpmavenapacheorgmaven-v4_0_0xsdgt
ltmodelVersiongt400ltmodelVersiongt
ltgroupIdgtdemavenbuchbeispieleltgroupIdgt
ltartifactIdgtwebapp-beispielltartifactIdgt
ltpackaginggtwarltpackaginggt
ltversiongt10-SNAPSHOTltversiongt
ltnamegtwebapp-beispiel Maven Webappltnamegt
lturlgthttpmavenapacheorglturlgt
ltdependenciesgt
ltdependencygt
ltgroupIdgtjunitltgroupIdgt
ltartifactIdgtjunitltartifactIdgt
ltversiongt381ltversiongt
ltscopegttestltscopegt
ltdependencygt
ltdependenciesgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 42 Dienstag 12 Juli 2011 443 16
27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

27Ein Web-Projekt
43
272 Servlet-API
Um die erstellte Web-Anwendung auch mit Leben zu fuumlllen benoumltigen wir dieServlet-API in unserem Klassenpfad Allerdings nur zum Kompilieren da norma-lerweise jeder Servlet-Container die Servlet-API in seiner Laufzeitumgebung mit-bringt Binden wir die Bibliothek auch zur Laufzeit ein wuumlrde dies deshalbhoumlchstwahrscheinlich zu einem Versionskonflikt fuumlhren Um dies zu vermeidenverwendet Maven den Guumlltigkeitsbereich provided der angibt dass die Biblio-thek nicht durch Maven zur Laufzeit zur Verfuumlgung gestellt werden muss
273 Ausfuumlhren der Web-Anwendung
Normalerweise muss um eine Web-Applikation auszufuumlhren ein Servlet-Contai-ner wie Tomcat oder Jetty konfiguriert und die Applikation deployed werden Ver-wendet man jedoch das Jetty-Plugin jetty-maven-plugin kann die Web-Applikation direkt mit Maven gestartet werden Dazu muss lediglich die Dateipomxml um einen Plugin-Eintrag erweitert werden
ltdependenciesgt
ltdependencygt
ltgroupIdgtjavaxservletltgroupIdgt
ltartifactIdgtservlet-apiltartifactIdgt
ltversiongt24ltversiongt
ltscopegtprovidedltscopegt
ltdependencygt
ltdependenciesgt
ltprojectgt
ltbuildgt
ltfinalNamegtwebapp-beispielltfinalNamegt
ltpluginsgt
ltplugingt
ltgroupIdgtorgmortbayjettyltgroupIdgt
ltartifactIdgtjetty-maven-pluginltartifactIdgt
ltversiongt6122ltversiongt
ltplugingt
ltpluginsgt
ltbuildgt
ltprojectgt
Maven_9118-8book Seite 43 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
44
Wird nun auf der Konsole
aufgerufen steht eine Jetty-Instanz auf Port 8080 zur Verfuumlgung Ein anderer Portkann mittels -Djettyport=ltNNNNgt uumlbergeben werden
[jetb] enthaumllt eine ausfuumlhrliche Beschreibung uumlber die Konfigurationselemente desPlugins
Der Befehl mvn package erzeugt im Verzeichnis target$finalname ein kom-plettes Abbild der Web-Applikation Dieser Pfad kann einem lokalen Servlet-Con-tainer als Basisverzeichnis mitgeteilt werden um die Applikation waumlhrend derEntwicklungsphase zu testen Um unser Beispiel in Tomcat 60 anzumeldenmuss dazu im Tomcat-Installationsverzeichnis die Datei confCatalinalocal-hostwebapp-beispielxml mit folgendem Inhalt angelegt werden
28 Weitere Projekttypen
Fuumlr einfache Java-Projekte mag die Projekterzeugung mittels mvn arche-typecreate ausreichend sein sobald aber andere (oder eigene) Templates ver-wendet werden sollen sollte das bereits erwaumlhnte Goal
verwendet werden
Nach dem Aufruf bietet Maven eine Liste von Projekt-Archetypen an Darunterbefinden sich unter anderem Vorlagen fuumlr J2EE- JPA- und Portlet-Projekte MitVersion 20 des Plugins werden 401 verschiedene Projektvorlagen angeboten
Der aufgefuumlhrte Typ maven-archetype-quickstart ist uumlbrigens der Standard-projekttyp der beim Aufruf des Goals archetypecreate ohne den ParameterarchetypeArtifactId verwendet wird
Wurde einer der angegebenen Archetypen aus der Liste ausgewaumlhlt fragt Mavennoch nach groupId artifactId version und package und generiert dann einProjekt des ausgewaumlhlten Typs
mvn jettyrun
ltContext
path=webapp-beispiel
docBase=ltPFADgtwebapp-beispieltargetwebapp-beispiel
reloadable=true gt
mvn archetypegenerate
Maven_9118-8book Seite 44 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

29Entwicklungsumgebungen
45
In Abschnitt 184 wird gezeigt wie eigene Vorlagen fuumlr die Verwendung mit demArchetype-Plugin erzeugt werden koumlnnen
29 Entwicklungsumgebungen
Normalerweise benutzen von einigen Puristen mal abgesehen Entwicklermoderne IDEs (Integrated Development Environment) die oft eigene proprietaumlreKonfigurationsdateien verwenden
Da Maven aber alle notwendigen Informationen des Projekts in der pomxmlzusammenhaumllt gibt es fuumlr die verbreitetsten IDEs auch Plugins die die Projekteautomatisch importierbar machen
Da ich meine taumlgliche Arbeit mit Eclipse erledige werden die anderen IDEs hiernur oberflaumlchlich behandelt
291 Eclipse
Fuumlr Eclipse gibt es mehrere Loumlsungen um Maven-Projekte zu integrieren Derdirekteste ist die Generierung der Projektdateien classpath und project mitHilfe des Maven-Eclipse-Plugins
Die Datei project im unserem beispiel-projekt sieht danach wie folgt aus
Choose a number(1234567891011121314151617181920
212223242526272829303132333435363738394041)
15 10
Define value for groupId demavenbuchbeispiele
Define value for artifactId j2ee-beispiel
Define value for version 10-SNAPSHOT
Define value for package demavenbuchbeispiele
Confirm properties configuration
groupId demavenbuchbeispiele
artifactId j2ee-beispiel
version 10-SNAPSHOT
package demavenbuchbeispiele
Y
mvn eclipseeclipse
ltprojectDescriptiongt
ltnamegtbeispiel-projektltnamegt
ltcommentgt
Maven_9118-8book Seite 45 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
46
Die Datei classpath hat folgenden Inhalt
Dabei faumlllt auf dass die Abhaumlngigkeit des Projekts beispiel-projekt von JUnitrelativ zu M2_REPO hergestellt wird Damit Eclipse den Pfad M2_REPO aufloumlsenkann muss im Build-Pfad eine Classpath-Variable angelegt werden Dies kanndurch den Aufruf von
geschehen oder manuell eingegeben werden (siehe Abbildung 25)
Dazu muss in Eclipse unter WindowsPreferencesJavaBuild PathClass-path Variables eine neue Variable mit dem Namen M2_REPO eingetragen wer-den die dann auf das Verzeichnis des lokalen Repositorys verweist
Nun kann das Projekt importiert werden Hierzu wird der Projektordner angege-ben wenn im Kontextmenuuml des aktuellen Workspace der Befehl Import -gt Exis-ting projects into workspace ausgefuumlhrt wird
ltprojectsgt
ltbuildSpecgt
ltbuildCommandgt
ltnamegtorgeclipsejdtcorejavabuilderltnamegt
ltbuildCommandgt
ltbuildSpecgt
ltnaturesgt
ltnaturegtorgeclipsejdtcorejavanatureltnaturegt
ltnaturesgt
ltprojectDescriptiongt
ltclasspathgt
ltclasspathentry kind=src path=srcmainjavagt
ltclasspathentry kind=src path=srctestjava
output=targettest-classesgt
ltclasspathentry kind=output path=targetclassesgt
ltclasspathentry kind=con
path=orgeclipsejdtlaunchingJRE_CONTAINERgt
ltclasspathentry kind=var
path=M2_REPOjunitjunit381junit-381jargt
ltclasspathgt
mvn -Declipseworkspace=ltpath-to-eclipse-workspacegt
eclipseadd-maven-repo
Maven_9118-8book Seite 46 Dienstag 12 Juli 2011 443 16
29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

29Entwicklungsumgebungen
47
Abb 25 Einstellung der Classpath-Variablen in Eclipse
Abb 26 Import von Projekten in Eclipse
Maven_9118-8book Seite 47 Dienstag 12 Juli 2011 443 16
Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118

Kapitel 2Maven im Uumlberblick
48
Nach diesem Schritt steht im Eclipse-Workspace das Projekt beispiel-projektzur Verfuumlgung
Kapitel 16 beschaumlftigt sich ausfuumlhrlich mit der Konfiguration des Eclipse-Pluginsund moumlglicher Alternativen
292 Netbeans
Netbeans unterstuumltzt Maven direkt Fuumlr Netbeans Versionen vor 67 existiert dasProjekt Mevenide (httpmevenidecodehausorg) ein Plugin das den Importvon Maven-Projekten in Netbeans erlaubt
Fuumlr aumlltere Netbeans-Versionen (4x und 50) ist es auch moumlglich mit
die notwendigen Konfigurationsdateien zu erzeugen Das Maven-Plugin net-beans-freeform wird aber anscheinend nicht mehr weiterentwickelt
Die Maven-Homepage bietet weitere Informationen zur Verwendung von net-beans-freeform httpmavenapacheorgguidesminiguide-ide-netbeansguide-ide-
netbeanshtml
293 IntelliJ IDEA
IntelliJ IDEA unterstuumltzt Maven seit der Version 8 von sich aus Fuumlr aumlltere Versio-nen lassen sich mit
die notwendigen Konfigurationsdateien erzeugen
mvn netbeans-freeformgenerate-netbeans-project
mvn ideaidea
Maven_9118-8book Seite 48 Dienstag 12 Juli 2011 443 16
- Copyright copy des Titels raquoMaven 3 - Konfigurationsmanagement mit Javalaquo (ISBN 978-3-8266-9118-8) 201113by Verlagsgruppe Huumlthig Jehle Rehm GmbH Heidelberg13Naumlhere Informationen unter httpwwwmitpde9118