MyGourmet 1 im lokalen Repository
 
  Maven-Abhängigkeit für MyFaces 2.2.1

16 Eine kurze Einführung in Maven

Apache Maven ist ein äußerst hilfreiches Werkzeug, um Java-basierte Projekte zu verwalten. Es kann unter anderem Applikationen verwalten, erstellen, verteilen, automatisch testen, Abhängigkeiten verwalten und Webseiten des Projekts erstellen. Neben einer standardisierten Beschreibung von Projekten im Project Object Model ( pom.xml ) und einem standardisierten Build-Prozess bietet Maven unter anderem noch eine automatische Auflösung von Abhängigkeiten zu anderen Projekten und Bibliotheken. Die Funktionalität lässt sich durch verschiedenste Plug-ins erweitern, von denen wir in weiterer Folge einige zeigen.
Zunächst sollte man wissen, dass Maven sämtliche für den Build-Prozess benötigte Dateien, seien es normale Bibliotheken oder Plug-ins, automatisch von zentralen Stellen aus dem Internet - den sogenannten Maven-Repositories - lädt Das zentrale Maven-Repository finden Sie zum Beispiel unter der Adresse http://search.maven.org/. Dort können Sie auch sehr bequem nach Maven-Artefakten suchen.: . In einem solchen Repository sind die Bibliotheken von vielen Open-Source-Projekten in einer speziellen Maven -Struktur (unterteilt nach Group-ID, Artifact-ID und Version) abgelegt.
Ein großer Pluspunkt von Maven ist die automatische Verwaltung von Abhängigkeiten auf Bibliotheken. Die Abhängigkeiten eines Projekts werden in seiner pom.xml in Form von dependency -Elementen definiert. Listing Maven-Abhängigkeit für MyFaces 2.2.1 zeigt die Abhängigkeiten für MyFaces in Version 2.2.1.
<dependencies>
  <dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-api</artifactId>
    <version>2.2.1</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.myfaces.core</groupId>
    <artifactId>myfaces-impl</artifactId>
    <version>2.2.1</version>
    <scope>compile</scope>
  </dependency>
</dependencies>
Wie Sie sehen, werden Abhängigkeiten auf Bibliotheken über ihre Group-ID, Artifact-ID und Version definiert. Im Repository spiegelt sich diese Struktur in der Verzeichnishierarchie wider.
Die benötigten Bibliotheken werden nach dem Ladevorgang in einem lokalen Repository abgelegt und können bei Bedarf von dort bezogen werden. Dieses lokale Verzeichnis befindet sich standardmäßig im Homeverzeichnis des Benutzers, das je nach Betriebssystem variieren kann. Unter Windows liegt das lokale Repository beispielsweise in folgendem Verzeichnis:
C:\Benutzer\Benutzer\Benutzername.m2\Benutzername.m2\repository
repository

16.1 Installation von Maven

In diesem Abschnitt beschreiben wir Schritt für Schritt, wie Maven auf einem Windows-System eingerichtet wird:
  1. Laden von Maven
    Eine komprimierte Datei der aktuellen Version von Maven ist auf der Projektwebseite http://maven.apache.org zu finden. Die aktuelle Version ist 3.0.5, mit der auch alle Beispiele getestet wurden.
  2. Entpacken des Archivs
    Zuerst müssen Sie die heruntergeladene Zip-Datei apache-maven-3.x.x-bin.zip in ein Verzeichnis Ihrer Wahl entpacken. Im weiteren Verlauf nehmen wir folgendes Verzeichnis an, das abhängig von der konkreten Versionsnummer auf Ihrem Rechner anders aussehen kann:
    C:\Programme\Programme\maven-3.x.x
    
  3. Setzen der benötigten Umgebungsvariablen
    Für den einwandfreien Betrieb von Maven müssen einige Umgebungsvariablen gesetzt werden. Zuerst setzen wir die Variable MAVEN_HOME auf das Installationsverzeichnis von Maven. Öffnen Sie dazu
    Systemeinstellungen (Windows-Taste + Pause)
        -> Erweitert -> Umgebungsvariablen
    
    und fügen Sie unter den Benutzervariablen eine Variable mit dem Namen MAVEN_HOME und folgendem Wert hinzu:
    C:\Programme\Programme\maven-3.x.x
    
    Des Weiteren muss das bin -Verzeichnis der Maven-Installation in den Systempfad aufgenommen werden. Setzen Sie dazu die Benutzervariable PATH auf folgenden Wert:
    MAVEN_HOME\bin;PATH
    
    Im selben Dialog muss auch JAVA_HOME zum Pfad des Java-JDK gesetzt sein, also zum Beispiel auf:
    C:\Programme\Programme\Java\Java\jdk1.7.0_21
    
  4. Maven überprüfen In der Konsole kann nun überprüft werden, ob Maven korrekt aufgesetzt wurde:
    mvn --version
    
    Wird eine Versionsnummer ausgegeben, kann der nächste Schritt erfolgen, falls nicht, müssen die vorherigen Punkte noch einmal auf Korrektheit überprüft werden.
Ihr System verfügt jetzt über eine lauffähige Version von Maven . Als Einstiegspunkte für vertiefende Informationen zum Thema Maven bieten sich dessen Projektseite http://maven.apache.org und die frei verfügbaren Bücher Maven: The Complete Reference und Maven by ExampleMaven by Example und Maven: The Complete Reference finden Sie unter http://www.sonatype.com/resources/books.: an.

16.2 Maven und MyGourmet

Alle MyGourmet -Beispiele sind als Maven -Projekte angelegt und dadurch sehr einfach zu handhaben. Wir werden in diesem Abschnitt kurz die Möglichkeiten von Maven anhand von MyGourmet präsentieren. Der Quellcode aller MyGourmet -Beispiele ist unter der URL http://jsfatwork.irian.at verfügbar.
Beginnen wir mit der grundlegendsten Aufgabe: Der Build-Prozess des Projekts wird mit folgendem Befehl im Wurzelverzeichnis des Projekts angestoßen:
mvn clean install
Maven löscht daraufhin alle bisher generierten Dateien, kompiliert alle Klassen und packt sie zusammen mit allen Ressourcen und Bibliotheken, die über Abhängigkeiten in der Datei pom.xml definiert sind, in ein WAR-Archiv. Diese Dateien landen im ersten Schritt im Verzeichnis target . Das WAR-Archiv wird dann im lokalen Repository unter der Group-ID, der Artifact-ID und der Version, die in der pom.xml angegebenen sind, abgelegt. Für das Beispiel MyGourmet 1 ergibt sich daraus der in Abbildung MyGourmet 1 im lokalen Repository ersichtliche Verzeichnisbaum.
Abbildung:MyGourmet 1 im lokalen Repository
Standardmäßig benutzen alle MyGourmet -Beispiele Mojarra als JSF-Implementierung. Wir haben allerdings die Projektbeschreibung in der Datei pom.xml so gestaltet, dass Sie ohne Änderungen an der Datei selbst auf MyFaces umschalten können. Dazu gibt es zwei Profile mit den jeweils für die Implementierung benötigten Abhängigkeiten. Wenn Sie keines der Profile explizit auswählen, kommt immer Mojarra zum Einsatz. Wollen Sie MyFaces einsetzen, müssen Sie das Profil mit der ID myfaces wie folgt beim Aufruf von Maven aktivieren:
mvn clean install -P myfaces
Falls im Browser Probleme auftreten, wenn Sie dasselbe Projekt direkt hintereinander mit MyFaces und Mojarra ausführen (oder umgekehrt), sollten Sie den Cache des Browsers löschen. Manchmal führen in diesem Fall gecachte JavaScript-Dateien zu Problemen.
Alle MyGourmet -Beispiele sind über ihre pom.xml so konfiguriert, dass sie mit folgendem Befehl im Wurzelverzeichnis des Projekts ausgeführt werden können:
mvn jetty:run
Das Jetty-Maven-Plug-in startet daraufhin den Servlet-Container Jetty und rollt die Anwendung aus. MyGourmet 1 kann dann zum Beispiel unter folgender Adresse im Browser aufgerufen werden:
http://localhost:8080/mygourmet01
Sie müssen das Projekt vorher nicht kompilieren oder im lokalen Repository installieren. Maven kümmert sich automatisch darum, falls das noch nicht geschehen ist.
Auch hier gilt, dass Sie Apache MyFaces über das Profil mit der ID myfaces aktivieren können:
mvn jetty:run -P myfaces
Alle gängigen Entwicklungsumgebungen unterstützen mittlerweile den direkten Import von Maven-Projekten. Wie das im Detail mit Eclipse funktioniert, können Sie in Abschnitt Sektion:  Eclipse und MyGourmet nachlesen.

16.3 Erstellen eines JSF-Projekts

Mit Maven ist es sehr einfach, eine HelloWorld -Anwendung zu generieren. Für diesen Zweck gibt es in Maven das Konzept der so genannten Archetypes . Das sind Vorlagen, auf deren Basis sich aus vorhandenen Bibliotheken Maven-Projekte mit der grundlegenden Struktur einer Applikation generieren lassen.
Der Vorlagenkatalog von MyFaces enthält zurzeit folgende acht Archetypes zum Generieren von JSF-Projekten:
  1. MyFaces-Hello-World
    Vorlage für das Grundgerüst eines Projekts mit MyFaces in Version 1.2 inklusive aller Abhängigkeiten und JSP als Seitendeklarations-sprache.
  2. MyFaces-Hello-World mit Facelets
    Vorlage für das Grundgerüst eines Projekts mit MyFaces in Version 1.2 inklusive aller Abhängigkeiten und Facelets als Seitendeklarationssprache.
  3. MyFaces-Hello-World mit Portlets
    Vorlage für das Grundgerüst eines Portlets-Projekts mit MyFaces in Version 1.2 inklusive aller Abhängigkeiten und JSP als Seitendeklarationssprache.
  4. MyFaces-Hello-World 2.0
    Vorlage für das Grundgerüst eines Projekts mit MyFaces in Version 2.1 inklusive aller Abhängigkeiten und Facelets als Seitendeklarationssprache.
  5. MyFaces-Hello-World 2.0 mit OWB
    Vorlage für das Grundgerüst eines Projekts mit MyFaces in Version 2.1 und Apache OpenWebBeansApache OpenWebBeans ist eine Implementierung des Standards Contexts and Dependency Injection for Java (CDI, JSR-299).: inklusive aller Abhängigkeiten und Facelets als Seitendeklarationssprache.
  6. JSF-Komponente
    Eine spezielle Vorlage, aus der Maven-Projekte für Komponentenbibliotheken mit MyFaces in Version 1.2 generiert werden können.
  7. MyFaces-Hello-World mit Trinidad
    Vorlage für das Grundgerüst eines Maven-Projekts mit MyFaces in Version 1.2 und Trinidad in Version 1.2 inklusive aller Abhängigkeiten und JSP als Seitendeklarationssprache.
  8. MyFaces-Hello-World mit Trinidad 2.0
    Vorlage für das Grundgerüst eines Maven-Projekts mit MyFaces in Version 2.1 und Trinidad in Version 2.0 inklusive aller Abhängigkeiten und Facelets als Seitendeklarationssprache.
Erstellen wir also jetzt ein Maven-Projekt für eine einfache Webanwendung in JSF. Der Vorgang ist denkbar einfach: Rufen Sie dazu in der Konsole in einem beliebigen Verzeichnis folgenden Befehl auf:
mvn archetype:generate 
    -DarchetypeCatalog=http://myfaces.apache.org
Dieser Befehl startet die Projektgenerierung mit dem Vorlagenkatalog von Apache MyFaces . Das Erstellen des Projekts besteht aus folgenden drei Schritten:
  1. Maven stellt alle Vorlagen aus dem oben angegebenen Katalog http://myfaces.apache.org in einer nummerierten Liste dar. Wählen Sie die Nummer der Vorlage mit dem Namen myfaces-archetype-helloworld20 aus.
  2. Nach der Auswahl müssen Sie die Anwendung konfigurieren. Geben Sie als Group-ID at.irian.jsfatwork , als Artifact-ID helloworld , als Version 1.0-SNAPSHOT und als Package des Projekts at.irian.jsfatwork.helloworld ein.
  3. Nach dem Bestätigen der Einstellungen legt Maven die Projektstruktur unter dem Verzeichnis /helloworld an.
Die generierte Applikation baut auf MyFaces in Version 2.1 mit allen benötigten Abhängigkeiten auf - diese wurden bereits in die Maven -Projektdatei pom.xml eingetragen. Genauso befinden sich unter
\helloworld\helloworld\src\src\main\main\webapp\webapp\WEB-INF
die für die Anwendung benötigten Konfigurationsdateien web.xml und faces-config.xml mit den erforderlichen Parametern. Je nach Bedarf sind diese wie in Abschnitt Sektion:  Konfiguration von JavaServer Faces beschrieben abzuändern.