# JSF und Maven mit Eclipse



## Rudolf (17. Dez 2012)

Hallo,

also maven ist ja toll mit dem dependenciemanagement aber total grässlich in der Benutzung.

Ich habe mir ein maven project mit m2eclipse angelegt vom archetype apache-webapp. es ist bereits eine index.jsp angelegt und wenn ich über run as maven build... und als goal tomcat:run starte, dann wird tomcat richtig gestartet und es wird die jsp gerendert. ich möchte aber jsf mit maven zum laufen kriegen. dafür habe ich mir eine dependencie zugelegt:


```
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>de.rs</groupId>
	<artifactId>mavenWeb</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>mavenWeb Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<repositories>
		<repository>
			<id>jvnet-nexus-releases</id>
			<name>jvnet-nexus-releases</name>
			<url>https://maven.java.net/content/repositories/releases/</url>
		</repository>
	</repositories>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
    </dependency>
		<dependency>
			<groupId>javax.faces</groupId>
			<artifactId>javax.faces-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>
	<build>
		<finalName>mavenWeb</finalName>
	</build>
</project>
```

ich kriege dann immer den fehler:


```
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building mavenWeb Maven Webapp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> tomcat-maven-plugin:1.1:run (default-cli) @ mavenWeb >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ mavenWeb ---
[debug] execute contextualize
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ mavenWeb ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] <<< tomcat-maven-plugin:1.1:run (default-cli) @ mavenWeb <<<
[INFO] 
[INFO] --- tomcat-maven-plugin:1.1:run (default-cli) @ mavenWeb ---
[INFO] Running war on http://localhost:8080/mavenWeb
[INFO] Using existing Tomcat server configuration at C:\projekte\mavenWeb\target\tomcat
Dez 17, 2012 1:04:00 PM org.apache.catalina.startup.Embedded start
INFO: Starting tomcat server
Dez 17, 2012 1:04:00 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
Dez 17, 2012 1:04:00 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet Faces Servlet as unavailable
Dez 17, 2012 1:04:00 PM org.apache.catalina.core.ApplicationContext log
SEVERE: Error loading WebappClassLoader
  context: /mavenWeb
  delegate: false
  repositories:
----------> Parent Classloader:
ClassRealm[plugin>org.codehaus.mojo:tomcat-maven-plugin:1.1, parent: sun.misc.Launcher$AppClassLoader@15601ea]
 javax.faces.webapp.FacesServlet
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1095)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
	at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
	at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
	at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

Dez 17, 2012 1:04:00 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /mavenWeb threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1095)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:993)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4350)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4659)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
	at org.apache.catalina.startup.Embedded.start(Embedded.java:825)
	at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558)
	at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
	at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
	at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
	at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
	at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
	at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
	at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
	at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
	at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

Dez 17, 2012 1:04:00 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Dez 17, 2012 1:04:00 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
```

Wie löse ich das Problem?


----------



## nillehammer (17. Dez 2012)

Du hast in der Dependency den scope "provided" angegeben. D.h. das entspr. Jar müsste im Tomcat bereits vorhanden sein. Kann man natürlich machen, indem man es in den Tomcat-Lib-Ordner legt, aber würd ich jetzt eher nicht machen. Lasse den Scope einfach weg. Dann packt Maven das Jar mit ins War. Darüber hinaus fehlt imho noch eine Dependency zu irgend einer JSF-*Implementierung*.


----------



## Rudolf (17. Dez 2012)

Danke für die Antwort.

Habe die Angaben aus:

JavaServer Faces Community &mdash; Java.net

Warum zum Teufel schreiben die nicht die vollständigen Angaben, wenn eine Implementierung fehlt? 

Oder wie vermeide ich solche unvollständigen Angaben am besten? Gibt es eine zentrale Reporistorie, die alles listet?


----------



## nillehammer (18. Dez 2012)

> Oder wie vermeide ich solche unvollständigen Angaben am besten? Gibt es eine zentrale Reporistorie, die alles listet?


Es gibt das Maven Central Repo. Dort liegen sehr viele und zumindest die meist benutzten libs drinnen. Allerdings erspart Dir das nur die Einbindung eines extra Repos. Was Du brauchst, musst Du leider immer selbst wissen.

Der von Dir angegebene Link funktioniert übrigens nicht. Ich kann also nicht beurteilen, wie gut oder schlecht die Infos dort sind.


----------



## Rudolf (19. Dez 2012)

nillehammer hat gesagt.:


> Es gibt das Maven Central Repo. Dort liegen sehr viele und zumindest die meist benutzten libs drinnen. Allerdings erspart Dir das nur die Einbindung eines extra Repos. Was Du brauchst, musst Du leider immer selbst wissen.
> 
> Der von Dir angegebene Link funktioniert übrigens nicht. Ich kann also nicht beurteilen, wie gut oder schlecht die Infos dort sind.



Habs gerade probiert, er funktioniert. Vll kurz off gewesen.


----------



## deetee (23. Dez 2012)

Das Tutorial basiert auf Glassfish und du willst es 1:1 mit Tomcat abarbeiten, statt mit Glassfish. Glassfish bringt all die JARs direkt mit, daher der scope "provided".

Also am besten ist du suchst dir ein Tutorial, welches mit Tomcat arbeitet.


----------

