Estoy teniendo algunos problemas con el tarro de carga. Me enviaron un Struts2 aplicación web en Tomcat, y que resultó en el error:

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

Me han excluido todos los jar-conflictos en pom.xml, pero parece ser otro slf4j-log4j archivo en Tomcat lib.

Entonces traté de quitar la slf4j-log4j12-1.5.8.jar en Tomcat/lib y vuelva a ejecutar la guerra de nuevo, pero todavía tengo otro error:

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.

No se me olvida nada aquí?

EDICIÓN: he eliminar la redundancia del servlet api incluida en pom.xml: es incluido accidentalmente por otro tarro. Pero después de excluir a los que jar yo tengo el error:

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

Mi servlet api en mi Tomcat tiene la versión 2.5; los excluidos servlet-api.jar en pom.xml tiene la versión 2.4.

OriginalEl autor Hoàng Long | 2011-03-31

2 Comentarios

  1. 7

    No creo tomcat viene con slf4j incluido, por lo que la eliminación de tomcat/lib es un paso correcto.

    A continuación, usted no debe tener servlet-api-x.jar en WEB-INF/lib, porque liado con tomcat. Marca como <scope>provided</scope> en maven pom.

    Para asegurarse de que todo es la limpieza de la llamada mvn clean

    Creo que tal vez parte de la causa, pero el problema aún persiste. ¿Te importaría revisar actualizado mi pregunta?
    Largo mvn clean para asegurarse de viejos frascos no están presentes en destino
    en realidad, «mvn clean» resolver mi problema, incluso cuando yo no excluir servlet-api-2.4.jar en pom.xml. Extraño.

    OriginalEl autor Bozho

  2. 2

    Parece que algo se está tirando en servlet-api-2.4.jar que no se supone para ser implementadas como parte de una webapp. Si usted tiene servlet api como una dependencia en su proyecto, asegúrese de que tiene un alcance de siempre. Esto le dice a maven uso para la compilación, pero no para el embalaje. (ver este Maven FAQ y Introducción a la Dependencia Mecanismo de).

    Sin embargo, servlet api también podría ser que se extraen de porque se hace referencia a transitivamente de una de las dependencias del proyecto. Si este es el caso, tratando de ejecución:

    mvn dependencia:árbol

    para imprimir una lista de dependencias transitivas y de dónde vienen. En la salida, búsqueda para el servlet api de dependencia con un no siempre alcance. A continuación, puede quitar el delincuente mediante la adición de una excluir a la de su antecesor y de dependencia en el POM.

    Tienes razón, pero después de excluir el servlet api, el problema aún persiste. Yo creo que si Tomcat proporcionar el frasco, no es necesario incluirlo en pom.xml. Es ese derecho?
    Largo: Usted todavía tendrá servlet api para la compilación en Maven, de lo contrario, cualquier referencia a la base de Servlets/JSP clases (HttpServlet, ServletRequest, etc.) no se encontraron cuando se compila. Todavía necesita ser incluido, pero con ‘siempre’ alcance.
    lo siento, pero no puedo encontrar una manera de hacer esto. ¿Cómo puedo especificar un frasco como siempre, mientras es arrastrado por una dependencia transitiva?

    OriginalEl autor prunge

Dejar respuesta

Please enter your comment!
Please enter your name here