Transcript
Page 1: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 2: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 3: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 4: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 5: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 6: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 7: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 8: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 9: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 10: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 11: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 12: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 13: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 14: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 15: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 16: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 17: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 18: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 19: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 20: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 21: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 22: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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
Page 23: Maven 3 - Konfigurationsmanagement mit Java - mitp.de€¦ · 27 Kapitel 2 Maven im Überblick Dieses Kapitel beschreibt, wie Maven installiert und ein erstes Projekt erstellt wird

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

  1. 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

Recommended