Direkt zur Navigation | Direkt zum Inhalt



JSF 2.0 mit Maven und Tomcat

JSF 2.0 mit Maven und Tomcat

Die Einrichtung eines JSF Maven Projekts in Kombination mit dem Tomcat-Plugin stellte mich vor einige kleine Einstiegshürden. Welche Dependencies sind nötig? Wo finden sich die passenden Jar-Files? Und warum werden die Managed Beans von JSF beim Starten des Tomcats nicht initialisiert? Hier daher die Schritte zur Einrichtung eines solchen Projekts.

Projekt anlegen

Um das Projekt initial anzulegen habe ich einen der Standard Maven Archetypes verwendet.

mvn archetype:generate
-> 18 maven-archetype-webapp (A simple Java web application)

Dependencies
Als Dependencies werden die JSF-API samt Implementierung, die Servlet API sowie JavaServer Pages Standard Tag Library (JSTL) verwendet.

<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-api</artifactId>
  <version>2.0.2</version>
</dependency>

<dependency>
  <groupId>com.sun.faces</groupId>
  <artifactId>jsf-impl</artifactId>
  <version>2.0.2</version>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

Repository
Die JSF API sowie dazu gehörige Implementierung finden sich im Maven Repository von Java.net.

<repository>
  <id>maven2-repository.dev.java.net</id>
  <name>Java.net Repository for Maven</name>
  <url>http://download.java.net/maven/2</url>
</repository>

Plugins
Zu guter letzt wird der Tomcat wie folgt konfiguriert.

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>tomcat-maven-plugin</artifactId>
</plugin>

Eclipse konfigurieren

Zur Unterstützung der Code Completion für JSF Taglibs muss der Dateityp der JSF-Dateien (in meinem Fall .xhtml) dem Content Type JSP zugeordnet werden:

Window > Preferences > General > Content Types > Text > JSP > Add (xhtml)

Projekt mit Tomcat starten

Wird das Projekt über Maven mittels mvn tomcat:run gestartet, gibt es ein Problem: Sämtliche @ManagedBeans(s) werden nicht initialisiert und können somit nicht verwendet werden. JSF sucht an zwei Stellen nach annotierten Klassen – unter WEB-INF/classes sowie in den jar-Files im Classpath. Sowohl das Verzeichnis WEB-INF/classes als auch das Verzeichnis WEB-INF/lib existiert allerdings nur sofern das Projekt mittels Maven zum war-Archiv gepackt wurde. Um dieses Problem zu lösen, muss das Projekt mittels mvn tomcat:run-war gestartet werden.

Will man das Packen des Projekts mit jeder Änderung umgehen, gibt es eine weitere Möglichkeit:

<build>
  <outputDirectory>src/main/webapp/WEB-INF/classes</outputDirectory>
</build>

Der Nachteil an dieser Lösung ist allerdings, dass man die gesamten class-Files im src-Verzeichnis ablegt.

Neues Kommentar