2010-08-10 23 views
18

este problema con JSTL me afectó durante los últimos días. Cualquier ayuda es apreciada.No se puede leer el TLD "META-INF/c.tld"

Tomcat 6.0.28
Eclipse: Helios

pom.xml:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.1.2</version> 
</dependency> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>2.4</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>taglibs</groupId> 
    <artifactId>standard</artifactId> 
    <version>1.1.2</version> 
</dependency> 
<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.0</version> 
    <scope>provided</scope> 
</dependency> 

JSP:

<%@ page session="true"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="utilfn" uri="/utility-functions" %> 

web.xml:

<web-app id="WebApp_ID" version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

Wh es Despliego la guerra construida por Maven en tomcat 6 usando el administrador funciona bien. Cuando lo ejecuto como "Ejecutar como> Ejecutar en servidor" dentro de eclipse, me sale esto:

No se puede leer TLD "META-INF/c.tld" de archivo JAR archivo":/< - Ubicación -> /. metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar ": org.apache.jasper.JasperException: Falló la clase de carga o una instancia TagLibraryValidator: org.apache.taglibs.standard.tlv.JstlCoreTLV

Dondequiera que mire, que dice lo mismo:

  1. Asegúrese de que servlet-api y jsp-api no estén en lib
  2. Asegúrese de utilizar la versión JSTL correcta y el URI que acompaña a JSP 2.0.

y parecen estar bien como puedo desplegar la guerra de forma independiente. Entonces, ¿qué pasa aquí?

+2

Pregunta bien escrita, muchos ejemplos. Buen trabajo. – Spedge

Respuesta

4

Compruebe que .metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar no está dañado (y realice una limpieza si es necesario).

+5

Aunque el estándar-1.1.2.jar no era el problema, todavía estoy aceptando su respuesta, porque no pude verificar esa ubicación. Simplemente no se me ocurrió. El problema era que servlet-api.jar se había copiado a esa ubicación de alguna manera cuando borré y reconfiguré mi servidor dentro de Eclipse. Eliminar ese archivo resolvió el problema. Cada vez que elijo "Limpiar" y "Limpiar directorio de trabajo Tomcat" desde el menú contextual del servidor, el jar aparece allí. No estoy seguro de por qué/cómo. Pero a partir de ahora, eliminar ese archivo manualmente lo está haciendo funcionar. ¡Gracias por la respuesta! –

+0

Gracias, esto fue útil. Todavía no he descubierto por qué/cómo reaparece el frasco, ¿verdad? –

+1

Me pasó a mí también que a veces se incluyen JAR aunque esté marcado como se indica en pom, he encontrado una solución con el paqueteExcluye http://stackoverflow.com/questions/6477504/maven-javax-servlet-specification-deployed – stivlo

5

Parece que hay un problema con el complemento maven/m2eclipse. Incluso estoy viendo el mismo problema. De forma predeterminada, está empujando todos los archivos jar al directorio lib de servidor. Que incluye los archivos jar "provistos" de alcance. Este problema se corrigió en las versiones anteriores de m2eclipse. Pero se presentó de nuevo, parece.

+0

Gracias . Sí, m2e 1.0 incluye los JAR proporcionados, como dices. Eso es un problema porque Tomcat no quiere javax.servlet.jsp: jsp-api como notas de Sobree más arriba. –

6

remove:
javax.servlet.jsp jsp-api 2.0 proporciona

de usted pom.xml y que debe hacer .. funcionó en mi caso :-)

15

Después de moverme usando Indigo Eclipse 3.7 y tomar la actualización perdida de m2e, este problema me pasó, eliminé la dependencia a continuación, funcionó bien.

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.1</version> 
    <scope>provided</scope> 
</dependency> 

no estoy seguro de por qué se ha ido a los problemas, ya que mi comprensión nueva versión de M2e tiene biblioteca compilación JSP ya.

+1

¡Has salvado mi cordura! –

0

plataforma: eclipse 3.7 indigo, tomcat 6.0.29
comentada en las siguientes dependencias pom.xml:

javax.servlet 
org.apache.taglibs 

este aclarado el tema (ya que se proporcionan a través de Tomcat) ...

+0

El interlocutor había aceptado una solución completamente diferente meses antes de su respuesta, por lo que este no era su problema. – itsbruce

0

estoy de acuerdo con la respuesta de Jay. Tengo el mismo problema aquí. Si elimino jsp-api de pom.xlm, la prueba de maven fallará porque no puede encontrar la clase jspWriter en jsp-api jar. Si mantengo jsp-api en pom y lo configuro como 'provisto' o 'prueba', el lado de tomcat fallará a medida que el plugin m2e empuje el jsp-api jar a las dependencias maven que luego se incluyen en mi lib desplegada tomcat. Yo diría que es un problema de complemento, ya que jsp-api debe declararse en pom.xml tal como se proporciona, ya que es proporcionado por los servidores de aplicaciones. No puedo encontrar ninguna manera de resolver este problema, pero para eliminar manualmente el jsp-api cada vez después de la sincronización del servidor Tomcat.

0

Con Eclipse, Por favor, asegúrese de que ha instalado 'Maven Integration for Eclipse WTP ' Con otro plug-in sin DAP, Eclipse cambiar la ruta de clases e incluyen servlet-api.jar en sus aplicaciones web.

+0

Si bien su respuesta puede ser útil, ya se ha resuelto haciendo otra cosa. –

2

Quickfix:

Hacer una copia de seguridad de .classpath y .project y .settings/org.eclipse.wst.common.component.

Ejecutar este comando:

mvn eclipse:eclipse 

O bien, haga clic con sobre el proyecto, en el submenú Maven, tiene una Actualización del Proyecto ... comando que creo que hace la misma cosa.

Volver a publicar.

Explicación:

probable Añadiste todas las Dependencias de Maven como un conjunto de despliegue a su proyecto. Esto copia todas las entradas de la ruta de clase Maven al directorio WEB-INF/lib. Abra el archivo de .classpath (en la raíz de su proyecto) y es probable que encuentre el siguiente código XML:

<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"> 
    <attributes> 
     <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> 
    </attributes> 
</classpathentry> 

Eso significa copia TODOS los archivos .jar que se convierte en un problema en este caso.

La actualización del proyecto debe eliminar el bloque XML anterior y enumerar explícitamente los archivos JAR.

lo tanto, si se vuelva a abrir .classpath, verá este lugar:

<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar" sourcepath="M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1-sources.jar"/> 
<classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar" sourcepath="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1-sources.jar"/> 
... 

Esto es por la ruta de clases, que aún necesita, pero que se elimine la dependencia para copiarlos en lib. En cambio, si abre .settings/org.eclipse.wst.common.component /, verá que los archivos JAR están explícitamente enumerados:

<dependent-module deploy-path="/WEB-INF/lib" handle="module:/classpath/var/M2_REPO/com/google/code/gson/gson/2.2.1/gson-2.2.1.jar"> 
    <dependency-type>uses</dependency-type> 
</dependent-module> 

Y, se le nota que jsp-API- 2.1.jar ahora está perdido. Aplica la misma lógica a los otros archivos JAR.

¿Alguien sabe cómo hacer esto automático?

0

Debe excluirse la dependencia jsp-api de importación jstl en su pom.xml:

<dependency> 
    <groupId>javax.servlet.jsp.jstl</groupId> 
    <artifactId>jstl-api</artifactId> 
    <version>1.2</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
     </exclusion> 
     <exclusion> 
      <artifactId>jsp-api</artifactId> 
      <groupId>javax.servlet.jsp</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 
0

Eliminado jsp-api 2.0 de .metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/ esto funcionó para mí.

0

Estaba obteniendo el mismo error en netbeans IDE 8.0.2. Resultó que mi parte estaba configurada en 8080 para saliente y apagado. Cambié el saliente a 8081 para el servidor Tomcat. ¡Funcionó! Luego cambié mi puerto de apagado 8005. Para cambiar, vaya a Herramientas> Servidores>

Mi servidor tomcat ahora funciona.

Cuestiones relacionadas