Eclipse - Maven2 - Tomcat Deployment

alan79

Mitglied
Hallo miteinander

Ich bin grad dabei ein neues Webproject in Eclipse aufzusetzen.
Hierbei möchte ich gerne Tomcat als Servletcontainer verwenden.
Weiter möchte ich gern maven2 für das deployment verwenden.


Nun hab ich das Problem, dass Maven2 beim deployment einfach stehen bleibt. Ich rufe maven mit den folgenden Goals auf:
package tomcat:deploy

Hier ein Auszug aus der Console in Eclipse:
-----------------------------------------------------------------------------------
[INFO] Nothing to compile - all classes are up to date
[INFO] Using default encoding to copy filtered resources.
[INFO] No sources to compile
[INFO] No tests to run.
[INFO] Packaging webapp
[INFO] Assembling webapp[timerep] in [C:\Data\SW_Development\Java\Eclipse Workspaces\wspace_timerep\timerep\target\timerep]
[INFO] Processing war project
[INFO] Webapp assembled in[109 msecs]
[INFO] Building war: C:\Data\SW_Development\Java\Eclipse Workspaces\wspace_timerep\timerep\target\timerep.war
[INFO] Starting forked execution [fork id: -531047848]
[INFO] Using default encoding to copy filtered resources.
[INFO] Nothing to compile - all classes are up to date
[INFO] Using default encoding to copy filtered resources.
[INFO] No sources to compile
[INFO] No tests to run.
[INFO] Packaging webapp
[INFO] Assembling webapp[timerep] in [C:\Data\SW_Development\Java\Eclipse Workspaces\wspace_timerep\timerep\target\timerep]
[INFO] Processing war project
[INFO] Webapp assembled in[47 msecs]
[INFO] Building war: C:\Data\SW_Development\Java\Eclipse Workspaces\wspace_timerep\timerep\target\timerep.war
[INFO] Ending forked execution [fork id: -531047848]
[INFO] Deploying war to http://localhost:8085/timerep

-----------------------------------------------------------------------------------

Hier noch die plugin configuration im pom.xml:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
<url>http://localhost:8085/manager</url>
</configuration>
</plugin>

Habt ihr irgendeine Idee woran das liegen könnte?
Vielen Dank und Grüsse
Alan
 
Mein Tipp: Leg das Projekt im Eclipse als Dynamic Webproject an (mit Maven Verzeichnisstruktur, also src/main/webapp als webroot) und benutz das M2Eclipse Plugin.

Dann kannst ganz normal im Eclipse entwickeln nd auch über die WTP Tools den Tomcat starten, die Anwendung deployen und debuggen und das Projekt gleichzeitig über die Kommandozeile bauen und packen. Deployment per Maven halte ich für umständlich.

Gruß
Ollie
 
Hallo Oliver
Danke für deine Antwort. Ich werde das mal so versuchen...
Grüsse
Alan
 
Zuletzt bearbeitet:
Hallo Ollie
Ich habe nun ein dynamic Webproject mit maven folderstruktur eingerichtet.
Leider habe ich mit dem Tomcat zu kämpfen. Ich krieg folgende Exception beim Start:
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
Irgendwie scheinen Tomcat JSF Libraries zu fehlen. Ich habe diese jedoch sauber als "dependency" in meinem pom.xml erfasst:

<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>1.2_08</version>
<classifier>classes</classifier>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>1.2_08</version>
<classifier>classes</classifier>
</dependency>

Hast Du eine Idee woran das liegen könnte?

Vielen Dank und Grüsse
Alan

Detaillierter Auszug aus Eclipse Console:
Code:
24.03.2008 17:03:17 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.5.0_09\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Java\jre1.6.0\bin\client;C:\Program Files\Java\jre1.6.0\bin;C:\Program Files\ThinkPad\Utilities;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\Wireless\Bin\;C:\Program Files\ThinkPad\ConnectUtilities;C:\Data\SW_Development\Java\eclipse-SDK-3.2.2-win32\eclipse\plugins\org.apache.ant_1.6.5\bin;C:\Data\SW_Development\Java\Tools\Glassfish\bin;C:\PROGRA~1\ULTRAE~1;C:\Program Files\QuickTime\QTSystem\;\;C:\Data\SW_Development\Java\Tools\Maven\apache-maven-2.0.8\bin;%Path%;C:\Program Files\Subversion\bin;C:\Data\SW_Development\Tools\SSH\Client;C:\Program Files\OpenSSH\bin;c:\Program Files\Microsoft SQL Server\90\Tools\binn\
24.03.2008 17:03:17 org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initializing Coyote HTTP/1.1 on http-8085
24.03.2008 17:03:17 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 625 ms
24.03.2008 17:03:17 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
24.03.2008 17:03:17 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.23
24.03.2008 17:03:17 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
24.03.2008 17:03:18 org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet Faces Servlet as unavailable
24.03.2008 17:03:18 org.apache.catalina.core.ApplicationContext log
SCHWERWIEGEND: Error loading WebappClassLoader
  delegate: false
  repositories:
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@113a53d
 javax.faces.webapp.FacesServlet
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1068)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
24.03.2008 17:03:18 org.apache.catalina.core.StandardContext loadOnStartup
SCHWERWIEGEND: Servlet /timerep2 threw load() exception
java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1205)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1068)
	at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
	at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:448)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
24.03.2008 17:03:18 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Starting Coyote HTTP/1.1 on http-8085
24.03.2008 17:03:18 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8509
24.03.2008 17:03:18 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/62  config=null
24.03.2008 17:03:18 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
24.03.2008 17:03:18 org.apache.catalina.startup.Catalina start
INFO: Server startup in 657 ms
 
Zuletzt bearbeitet:
Mit der M2Eclipse solltest du eine Bibliothek names "Maven Dependencies" im Classpath haben. Nun musst du diese wie alle anderen Bibliotheken auch als J2EE Dependencies deklarieren (Rechtsklick aufs Projekt -> Properties -> J2EE Dependencies -> gewünschte Libs auswählen). Nur die dort deklarierten Bibliotheken werden auch mit deployt.

Gruß
Ollie

PS: Bitte benutz für Stacktraces und Code die [ code] bzw. [ java] Tags...
 
Hallo Ollie
Vielen Dank erstmal für deine raschen Antworten!! ;-)
Ich habe nun in den Project Preferences die J2EE Module Dependencies gesetzt.

Nun schaut die Fehlermeldung vom Tomcat wiefolgt aus:
java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory

Kleine Verständnisfragen:
- Mit der Funktion "Publish" auf dem Server sollte doch die Application in den webapps folder des Tomcats kopiert werden? Oder Wird die Application irgendwie innerhalb eclipse gestartet?
- Kann die Maven "package" funktion verwendet werden d.h. wird das von maven erzeugte .war file durch den WTP Server genutzt?

Grüsse
Alan
 
Es hat sich anscheinend erledigt.

Es ist so, dass die Kombination der Libraries und Versionen hier sehr heikel ist.
- Tomcat Version
- JSF Libs
Anscheinend gibt es gewisse Bugs/Inkompatibilitäten zwischen JSF 1.2 und Tomcat 5.5x.
JSF 1.2 benötigt JSP 2. Tomcat 5.5 unterstützt wiederum kein JSP 2. Die Lösung hierbei ist anscheinend die Nutzung von Faclets und auf JSP zu verzichten.

Hierzu einige URL's:
http://jroller.com/RickHigh/entry/trying_to_get_jsf_1
http://www.thearcmind.com/confluenc...ed+with+JSF,+Facelets,+Eclipse+WTP+and+Tomcat

Ich finde es schon sehr speziell, wie schlecht das Ganze dokumentiert/beschrieben ist. Da verbringt man locker mal 3 Tage *sich die Haare raufend* damit die Eclipse Umgebung mit Tomcat zum laufen zu kriegen, ohne das man auch nur eine Zeile Code für die eigentliche Lösung geschrieben hat.
 
Da machst du aber den Bock zum Gärtner. Wenn du eine aktuelle Version von JSF nutzen willst, dann musst du halt auch die aktuelle Version von Tomcat (6.x) nehmen. Das ganze hat also weder was mit Tomcat noch mit Eclipse zu tun. Wenn du eine Technologie einsetzen willst, musst du dich halt schlau machen, welche Runtimeumgebung benötigt wird. Aber hey, das ist Java bzw. Softwareentwicklung.

Btw. Bugs und Inkompatibilitäten sind grundverschiedene Dinge.

Gruß
Ollie
 
Hallo Ollie

Mir ist klar, dass Bugs und Inkompatibilitäten nicht das Gleiche sind.

Nur bin ich eben auf beides Gestossen.

Der Grund wieso ich Tomcat 5.5 verwendet habe war das Maven2 Tomcat Deployment. Hier gibt es noch keine Integration für Tomcat 6. Da ich nun das Deployment per WTP organisiert habe gibt es auch keinen Grund mehr Tomcat 6 zu verwenden.

Weiter ist interessanterweise der Fehler nur bei Eclipse WTP aufgetreten. Wenn ich das .WAR-File manuelle auf den Tomcat 5.5 deployed habe hat alles wunderbar funktioniert.

Und da gabs noch ein paar andere Beispiele bezüglich web.xml und Listener Deklarationen. Tomcat 5 braucht gewisse Einträge. Tomcat 6 stört sich wiederum ab Listener Deklarationen d.h. diese müssen entfernt werden.

Aber Du hast natürlich recht, dass ist wohl Software Development. Ich bin halt noch ziemlich neu in Java und all diese OpenSource Frameworks können einen da schon einwenig erschlagen.. aber so langsam kommt der Überblick.

Es funktioniert übrigens alles wunderbar unterdessen. Hab jetzt auch nach Tomcat6 gewechselt. Und seit ich die Facelets kennengelernt habe bin ich total begeistert von JSF. Jetzt haben sich endlich alle Fragen bezüglich Design und integration von CSS geklärt!

Vielen Dank nochmals für deine Unterstützung.
Grüsse
Alan
 
Der Grund wieso ich Tomcat 5.5 verwendet habe war das Maven2 Tomcat Deployment. Hier gibt es noch keine Integration für Tomcat 6. Da ich nun das Deployment per WTP organisiert habe gibt es auch keinen Grund mehr Tomcat 6 zu verwenden.
Naja, sowas wird ja im Normalfall nicht auf der grünen Wiese entschieden, sondern basiert auf fachlichen, mehr oder weniger funktionalen und politischen Entscheidungen. Von daher gehört zu einem "richtigen" Projekt die Festlegung der Plattform. Wenn man natürlich herumexperimentiert, kommt es da zu Stolperstellen. Siehst als Erfahrung und als Wissen, dass du mit in Projekte nimmst.

Weiter ist interessanterweise der Fehler nur bei Eclipse WTP aufgetreten. Wenn ich das .WAR-File manuelle auf den Tomcat 5.5 deployed habe hat alles wunderbar funktioniert.
Das würde mich wundern. Ich vermute einfach, das in der Serverkonfiguration irgenwas halt leicht anders lief, du evtl. irgendne Kleinigkeit übersehen hast o.ä.

Und da gabs noch ein paar andere Beispiele bezüglich web.xml und Listener Deklarationen. Tomcat 5 braucht gewisse Einträge. Tomcat 6 stört sich wiederum ab Listener Deklarationen d.h. diese müssen entfernt werden.
Der Tomcat 6 besteht halt einfach auf ein XSD als Basis für die web.xml und is damit weniger fehlertolerant als sein Vorgänger. Manch einen nervt sowas. Wenn du die web.xml Standardkonform aufbereitest läuft die auf beiden Serverversionen.

Aber Du hast natürlich recht, dass ist wohl Software Development. Ich bin halt noch ziemlich neu in Java und all diese OpenSource Frameworks können einen da schon einwenig erschlagen.. aber so langsam kommt der Überblick.

Es funktioniert übrigens alles wunderbar unterdessen. Hab jetzt auch nach Tomcat6 gewechselt. Und seit ich die Facelets kennengelernt habe bin ich total begeistert von JSF. Jetzt haben sich endlich alle Fragen bezüglich Design und integration von CSS geklärt!
Jap, Java(web)entwicklung ist nicht unbedingt einsteigerfreundlich. Dass du dich aber so schnell durchgeschlagen hast, lässt doch Gutes hoffen...

Viel Spass noch...
Ollie
 
Zurück