Jar-Konflikt in Maven und Tomcat?
Ich habe ein paar Probleme mit der jar laden. Ich setzte eine Struts2 web-Anwendung auf Tomcat, und es führte zu Fehler:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:....../Tomcat%206.0/lib/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:....../Tomcat%206.0/webapps/Timesheet/WEB-INF/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2011-03-31 14:33:48,302 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:748 - Loading action configurations from: struts-default.xml
2011-03-31 14:33:50,592 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:832 - Loaded action configuration from: struts-default.xml
...
2011-03-31 14:33:50,809 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register:202 - Loaded type:com.opensymphony.xwork2.util.XWorkConverter name:struts impl:com.opensymphony
.xwork2.util.AnnotationXWorkConverter
Mar 31, 2011 2:33:50 PM org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Mar 31, 2011 2:33:50 PM org.apache.catalina.core.StandardContext start
SEVERE: Context [/Timesheet] startup failed due to previous errors
Habe ich ausgeschlossen, alle jar-Konflikte in pom.xml
, aber es scheint eine andere slf4j-log4j
- Datei im Tomcat-lib.
Dann habe ich versucht zu entfernen, die slf4j-log4j12-1.5.8.jar in Tomcat/lib und führen Sie den Krieg wieder, aber habe noch einen anderen Fehler:
Mar 31, 2011 2:44:51 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(...\Tomcat 6.0\webapps\Timesheet\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class:
javax/servlet/Servlet.class
... //Struts file still loaded here, but another Error filterStart: the same as above.
Tut ich was verpasst hier?
EDIT: ich habe entfernen Sie die redundanten servlet-api in pom.xml: ist es zufällig durch einen anderen jar. Aber nach ohne, dass die jar-ich habe den Fehler:
Mar 31, 2011 4:11:19 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(...\Tomcat 6.0\webapps\Timesheet\WEB-INF\lib\servlet-api-2.4.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class:
javax/servlet/Servlet.class
2011-03-31 16:11:20,234 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:748 - Loading action configurations from: struts-default.xml
2011-03-31 16:11:21,028 DEBUG com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles:832 - Loaded action configuration from: struts-default.xml
Mein servlet-api in mein Tomcat-version 2.5; der ausgeschlossen servlet-api.jar in pom.xml ist die version 2.4.
InformationsquelleAutor Hoàng Long | 2011-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass tomcat kommt mit slf4j gebündelt, so entfernen Sie es aus
tomcat/lib
ist ein richtiger Schritt.Dann sollte man sich nicht
servlet-api-x.jar
imWEB-INF/lib
, weil es im Bundle mit tomcat. Markieren Sie es als<scope>provided</scope>
in der maven-pom.Um sicherzustellen, dass alles ist gereinigt-up-call
mvn clean
Lange mvn clean stellen Sie sicher, dass die alten Gläser nicht im Ziel
tatsächlich ist "mvn clean" mein problem lösen, auch wenn ich nicht ausschließen servlet-api-2.4.jar in pom.xml. Seltsam.
InformationsquelleAutor Bozho
Es scheint, dass etwas zieht servlet-api-2.4.jar das soll nicht eingesetzt werden als Teil einer webapp. Wenn Sie servlet-api als dependency in Ihrem Projekt, stellen Sie sicher es hat einen Umfang von zur Verfügung gestellt. Dies sagt maven, es zu benutzen für die Kompilierung, aber nicht für die Verpackung. (siehe das Maven-FAQ-Eintrag und Einführung in das Dependency-Mechanismus).
Jedoch, servlet-api, könnte auch gezogen, weil es auf die verwiesen wird transitiv von einem Ihrer Projekt-Abhängigkeiten. Wenn dies der Fall ist, versuchen ausgeführt:
mvn
dependency:treezum ausdrucken einer Liste von transitiven Abhängigkeiten und wo Sie herkommt. In der Ausgabe suchen Sie nach dem servlet-api-Abhängigkeit mit einem nicht vorgesehenen Umfang. Sie können dann entfernen Sie die Täter, indem ein ausschließen zu seinen Vorfahren Abhängigkeit in Ihrer POM.
Lange: Sie müssen immer noch die servlet-api für die Kompilierung in Maven, sonst alles bezogen auf die Basis-Servlet - /JSP-Klassen (HttpServlet, ServletRequest, etc.) nicht gefunden beim kompilieren. Es muss noch enthalten sein, aber mit 'vorgesehenen' Rahmen.
sorry, aber ich finde keine Möglichkeit, dies zu tun. Wie kann ich festlegen, ein Glas bereitgestellt, während es durch gezogen eine transitive Abhängigkeit?
InformationsquelleAutor prunge