# java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener



## y0dA (1. Nov 2010)

Versuche gerade (nach wie vor) ein Projekt mit Spring 3, JPA 2 und JSF 2 aufzusetzen.

Beim Starten des Servers bekomme ich folgende Exception:

```
01.11.2010 11:46:38 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_22\jre\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\QuickTime\QTSystem\
01.11.2010 11:46:38 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNUNG: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:GrossesTestProjektWeb' did not find a matching property.
01.11.2010 11:46:38 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
01.11.2010 11:46:38 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 479 ms
01.11.2010 11:46:38 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
01.11.2010 11:46:38 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.29
01.11.2010 11:46:39 org.apache.catalina.core.StandardContext listenerStart
SCHWERWIEGEND: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
	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.StandardContext.listenerStart(StandardContext.java:4078)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
	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.core.StandardService.start(StandardService.java:519)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
01.11.2010 11:46:39 org.apache.catalina.core.StandardContext listenerStart
SCHWERWIEGEND: Skipped installing application listeners due to previous error(s)
01.11.2010 11:46:39 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Error listenerStart
01.11.2010 11:46:39 org.apache.catalina.core.StandardContext start
SCHWERWIEGEND: Context [/GrossesTestProjektWeb] startup failed due to previous errors
```

Hier meine pom.xml (testweise sind einige Spring Dependencies mehr drinnen als eventuell benötigt):

```
<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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>GrossesTestProjektWeb</groupId>
	<artifactId>GrossesTestProjektWeb</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!-- Shared version number properties -->
	<properties>
		<org.springframework.version>3.0.4.RELEASE</org.springframework.version>
	</properties>

	<dependencies>

		<dependency>
			<groupId>org.hibernate.java-persistence</groupId>
			<artifactId>jpa-api</artifactId>
			<version>2.0-cr-1</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>3.5.0-Beta-2</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
		</dependency>

		<dependency>
			<groupId>org.apache.myfaces.core</groupId>
			<artifactId>myfaces-api</artifactId>
			<version>2.0.0</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.myfaces.core</groupId>
			<artifactId>myfaces-impl</artifactId>
			<version>2.0.0</version>
			<scope>compile</scope>
		</dependency>


		<!-- Core utilities used by other modules. Define this if you use Spring 
			Utility APIs (org.springframework.core.*/org.springframework.util.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Expression Language (depends on spring-core) Define this if you use 
			Spring Expression APIs (org.springframework.expression.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Bean Factory and JavaBeans utilities (depends on spring-core) Define 
			this if you use Spring Bean APIs (org.springframework.beans.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Aspect Oriented Programming (AOP) Framework (depends on spring-core, 
			spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Application Context (depends on spring-core, spring-expression, spring-aop, 
			spring-beans) This is the central artifact for Spring's Dependency Injection 
			Container and is generally always defined -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Various Application Context utilities, including EhCache, JavaMail, 
			Quartz, and Freemarker integration Define this if you need any of these integrations -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Transaction Management Abstraction (depends on spring-core, spring-beans, 
			spring-aop, spring-context) Define this if you use Spring Transactions or 
			DAO Exception Hierarchy (org.springframework.transaction.*/org.springframework.dao.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, 
			spring-tx) Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA, 
			and iBatis. (depends on spring-core, spring-beans, spring-context, spring-tx) 
			Define this if you need ORM (org.springframework.orm.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Web application development utilities applicable to both Servlet and 
			Portlet Environments (depends on spring-core, spring-beans, spring-context) 
			Define this if you use Spring MVC, or wish to use Struts, JSF, or another 
			web framework with Spring (org.springframework.web.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Spring MVC for Servlet Environments (depends on spring-core, spring-beans, 
			spring-context, spring-web) Define this if you use Spring MVC with a Servlet 
			Container such as Apache Tomcat (org.springframework.web.servlet.*) -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${org.springframework.version}</version>
		</dependency>

		<!-- Support for testing Spring applications with tools such as JUnit and 
			TestNG This artifact is generally always defined with a 'test' scope for 
			the integration testing framework and unit testing stubs -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>
```

Lt. Google fehlt mir die spring-2.5.6.jar, da ich jedoch Spring 3 benutze denke ich dass es sich um die spring-mvc.jar handelt.
Unter WEB-INF/lib ist selbige auch nicht enthalten (benutze Maven) allen anderen JARs jedoch schon.
Lt. ClassNotFoundException : org.springframework.web.context.ContextLoaderListener soll ich jene JAR als external JAR am Server einbinden - macht man das aktuell wirklich so?

Lösungsvorschläge?


----------



## Tente (3. Nov 2010)

Check, ob die Bibliothek sauber mitdeployed wird.


----------



## Noctarius (3. Nov 2010)

Jupp bei diesem Fehler ist meistens ein Problem mit dem Deployment. Mein Eclipse vergisst schon mal ganz gerne Libs beim Deploy zum Tomcat.


----------



## y0dA (4. Nov 2010)

Habe herausgefunden dass org.springframework.web.context.ContextLoaderListener in spring-web.jar enthalten ist.
Sitze grade nicht vor dem Programm, aber bilde mir ein dass jenes Jar sehr wohl in WEB-INF/lib/ auscheint - checke das aber nochmal heute Abend.

Falls ihr Recht habt, wovon ich ausgehe, wie schaffe ich es dass Eclipse die JARs mitdeployed? Es kann ja nicht sein dass ich in Eclipse jedes Mal den Server starte und danach noch im Tomcat Ordner checken muss ob alles deployed ist und gegebenenfalls jars "zu Fuss" nachreichen muss?


----------



## MySelV (4. Nov 2010)

Hi,

das löst du wohl nur, wenn du nicht mit eclipse deployst. Am einfachsten dafür ist sicher die Nutzung von ant, indem du ein eigenen Task anlegen kannst, der dir die libs auf den Server kopiert.
Warum eclipse hier und da die libs vergisst, kann ich dir nicht sagen, ich weiß nur, dass ich das Problem auch oft hatte und deshalb auf ant umgestiegen bin.

Grüße


----------



## Tente (5. Nov 2010)

Kannst es schon mit Eclipse deployen. 

Bin mir gerade nich mehr sicher, hab gerade kein Eclipse offen. Meine du musst bei den Properties vom Projekt unter dem Punkt "Java EE Module Dependencies" den Haken bei den Bibliotheken setzen, die du mitdeployen willst.


----------



## Geeeee (5. Nov 2010)

Moment.Stop. Du nutzt Maven, aber willst mit Eclipse deployen? Ernsthafte Frage: Warum?
Pack doch in deine pom noch <packaging>war</packaging> rein und mach ein mvn package ?! 
Zum (Test-)Starten der Anwendung einfach ein mvn tomcat:run. 
Maven kennt tomcat defaultmäßig, deshalb brauchst du da nicht mit group, artifact und version hantieren, und läd eben nur die entsprechenden Plugins beim ersten mal nach.


----------



## y0dA (5. Nov 2010)

Geeeee hat gesagt.:


> Moment.Stop. Du nutzt Maven, aber willst mit Eclipse deployen? Ernsthafte Frage: Warum?
> Pack doch in deine pom noch <packaging>war</packaging> rein und mach ein mvn package ?!
> Zum (Test-)Starten der Anwendung einfach ein mvn tomcat:run.
> Maven kennt tomcat defaultmäßig, deshalb brauchst du da nicht mit group, artifact und version hantieren, und läd eben nur die entsprechenden Plugins beim ersten mal nach.



Ich bin es gewohnt dass ich bspw. in Eclipse den Server starte und per Eclipse am Server deploye und im Anschluss einfach den Server starte und die Applikation teste - das spielt sich alles in Eclipse ab. Es geht hier ja nicht drum ein WAR/EAR was auch immer zu erstellen sondern über die Entwicklungsumgebung das Programm zu testen.


----------



## Noctarius (5. Nov 2010)

Geeeee hat gesagt.:


> Moment.Stop. Du nutzt Maven, aber willst mit Eclipse deployen? Ernsthafte Frage: Warum?
> Pack doch in deine pom noch <packaging>war</packaging> rein und mach ein mvn package ?!
> Zum (Test-)Starten der Anwendung einfach ein mvn tomcat:run.
> Maven kennt tomcat defaultmäßig, deshalb brauchst du da nicht mit group, artifact und version hantieren, und läd eben nur die entsprechenden Plugins beim ersten mal nach.



Ich mach das in der Firma auch so, klappt normalerweise auch super (mit kleinen Besonderheiten). So musst du z.B. nach einem mvn clean auch in Eclipse ein Project / Clean machen wenn du z.B. Resources nutzt, weil nur Eclipse diese mit ins Target-Verzeichnis legt.
Zum Bauen sollte man Maven grundsätzlich clean in Verbindung mit package oder install nutzen.

Hin und wieder muss man auch noch nach einem Maven Build einfach mal alle Projekte (welche zusammenhängen beim Deploy) refreshen!


----------



## y0dA (5. Nov 2010)

Wo deployes Eclipse eigentlich hin? In den Tomcat 6 Ordner jedenfalls nicht..

**EDIT**
Ok hier wird hin deployed:
C:\Program Files\Development\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\

Interessant ist dass ich gar keine Libs hier unter
C:\Program Files\Development\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\GrossesTestProjektWeb\WEB-INF\lib 
habe.

In Eclipse im Packageexplorer sehe ich aber die libs in WEB-INF/lib......


----------



## Noctarius (5. Nov 2010)

Mach mal bei allen beteildigten Projekten ein Project / Clean (von Eclipse) und dann noch mal ein Refresh mit anschließendem Redeploy in den Tomcat (also im Kontextmenü vom Server "clean" nicht "publish")


----------



## y0dA (6. Nov 2010)

Noctarius hat gesagt.:


> Mach mal bei allen beteildigten Projekten ein Project / Clean (von Eclipse) und dann noch mal ein Refresh mit anschließendem Redeploy in den Tomcat (also im Kontextmenü vom Server "clean" nicht "publish")



Bringt leider nix, schön langsam zweifle ich an mir selbst..

Sysdeo Plugin wo bist du 


**EDIT**
Anscheinend gibt es Probleme mit dem m2eclipse Plugin..


----------



## Noctarius (6. Nov 2010)

Ansonsten manchmal bringt es auch was einfach die Projektfiles (von Eclipse) löschen, Projekt aus dem Workspace nehmen und per Maven neu importieren. Hatte es schon mal, dass Maven irgendwie die Files nicht mehr reparieren / erzeugen konnte / wollte.


----------



## mvitz (6. Nov 2010)

Ist denn das WPT Addon von m2eclipse bei dir installiert?


----------



## y0dA (6. Nov 2010)

Danke für eure Unterstützung, hatte tatsächlich vergessen unter *DEPLOYMENT ASSEMBLY* die Maven Dependencies anzugeben.


----------

