Estoy ejecutando un proyecto Maven que también es un proyecto web dinámico. He usado todas las bibliotecas de Spring en Maven. Lo creé web.xml
, pero cuando inicio mi servidor Tomcat 7 recibo el siguiente mensaje:
INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\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
Intenté eliminar el servlet webapp/lib
, pero no funcionó. Déjeme saber qué se debe hacer en mi caso.
Respuestas:
El archivo .jar de la API del servlet no debe estar incrustado dentro de la aplicación web ya que, obviamente, el contenedor ya tiene estas clases en su classpath: implementa las interfaces contenidas en este jar.
La dependencia debe estar en el
provided
alcance, en lugar delcompile
alcance predeterminado , en su pom de Maven:fuente
Recibe este mensaje de advertencia cuando el archivo jar de la API del servlet ya se ha cargado en el contenedor e intenta cargarlo una vez más desde el
lib
directorio.servlet.jar
de tulib
directorio.lib
directorio, busque su ruta de compilación y elimine el jar.Si está ejecutando un proyecto maven, cambie la
javax.servlet-api
dependencia al alcanceprovided
en su pom.xml ya que el contenedor ya proporcionaba el jar de servlet en sí mismo.fuente
Para solucionarlo, establezca el alcance en proporcionado . Esto le dice a Maven que use el código servlet-api.jar solo para compilar y probar, pero NO lo incluya en el archivo WAR. El contenedor implementado "proporcionará" el servlet-api.jar en tiempo de ejecución.
fuente
Puede encontrar la siguiente línea de comandos de Windows útil para rastrear el archivo jar infractor. crea un índice de todos los archivos de clase en todos los frascos de la carpeta. Ejecute desde la carpeta lib de su aplicación implementada, luego busque el archivo index.txt para la clase ofensiva.
fuente
Alcance de dependencia de Maven
fuente
He estado luchando con este problema y he probado numerosas "soluciones".
Sin embargo, al final, el único que funcionó y en realidad tardó unos segundos en hacerlo fue: eliminar y volver a agregar una nueva instancia de servidor !
Básicamente, hice clic derecho en mi servidor Tomcat en Eclipse en Servidores y lo eliminé. A continuación, agregué un nuevo servidor Tomcat. Limpié y volví a implementar la aplicación y me deshice de este error.
fuente
Compruebe dentro del directorio siguiente el archivo jar el-api.jar: C: \ apache-tomcat-7.0.39 \ lib \ el-api.jar si existe, entonces en este directorio de su aplicación web WEB-INF \ lib \ el-api.jar se debe quitar el frasco
fuente
cuando su patrón de URL es incorrecto, puede ocurrir este error.
p.ej. Si escribió @WebServlet ("inicio de sesión"), se mostrará este error. El correcto es @WebServlet ("/ login").
fuente
Las exclusiones y
provided
dependencias no funcionarán en proyectos secundarios.Si está utilizando herencia en proyectos de Maven, debe incluir esta configuración en el
pom.xml
archivo principal . Tendrá una<parent>...</parent>
sección en su pom.xml si está usando herencia . Entonces tendrás algo como esto en tu padrepom.xml
:fuente
Falta la biblioteca de dependencias JAX-WS “jaxws-rt.jar”.
Vaya aquí http://jax-ws.java.net/ . Descargue la distribución JAX-WS RI. Descomprímalo y copie "jaxws-rt.jar" en la carpeta de la biblioteca de Tomcat "{$ TOMCAT} / lib". Reinicie Tomcat.
fuente
Normalmente, cuando ve este mensaje, es benigno. Si dice
Significa que está ignorando su servlet-api-2.5.jar porque tomcat ya tiene una versión incorporada de ese jar, por lo que no va a usar la suya. Normalmente, esto no causa ningún problema.
Si sin embargo dice
WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class
entonces lo que puede hacer (en mi caso, es un frasco sombreado) es ejecutar
Dependencia de $ mvn: árbol
y descubre que tienes una dependencia transitiva de "algo" que depende de un jar que es servlet-api o algo parecido (ej
tomcat-servlet-api-9.0.0
.:). Entonces, agregue una exclusión a eso en su pom, por ejemplo: (en mi caso, tomcat, en su caso, probablemente los mencionados en las otras respuestas):fuente
Eliminar
servlet.jar
de laweb-inf/lib
carpeta de origen, ya que está disponible en lalib
carpeta tomcat, entonces funciona bienfuente