Подтвердить что ты не робот

Не удалось прочитать TLD "META-INF/c.tld"

В этой проблеме с JSTL я застрял последние пару дней. Любая помощь приветствуется.

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">

Когда я развертываю войну, созданную Maven, на tomcat 6, используя диспетчер, он отлично работает. Когда я запускаю его как "Запускать как > Запустить на сервере" внутри eclipse, я получаю следующее:

Невозможно прочитать TLD "META-INF/c.tld" из файла JAR ":/< - location → /. metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar": org.apache.jasper.JasperException: Не удалось загрузить или создать экземпляр класса TagLibraryValidator: org.apache.taglibs.standard.tlv.JstlCoreTLV

Где бы я ни выглядел, он говорит то же самое:

  • Убедитесь, что servlet-api и jsp-api не находятся в lib
  • Обязательно используйте правильную версию JSTL и URI, которые идут с JSP 2.0.

И они кажутся прекрасными, так как я могу развернуть войну самостоятельно. Так что здесь не так!?

4b9b3361

Ответ 1

Убедитесь, что .metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Myproject/WEB-INF/lib/standard-1.1.2.jar не поврежден (и при необходимости выполните некоторую очистку).

Ответ 2

После того, как я перешел с использованием Indigo Eclipse 3.7 и взял продленное обновление m2e, эта проблема возникла со мной, я удаляю зависимость ниже, она хорошо работала.

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

Я не уверен, почему проблемы были упущены, так как в моем понимании новой версии m2e уже есть библиотека компиляции jsp.

Ответ 3

удалить:
   javax.servlet.jsp  JSP-апи  2,0  предоставлена  

от вас pom.xml, и это должно быть.. это сработало в моем случае: -)

Ответ 4

Похоже, что есть проблема с плагином maven/m2eclipse. Даже я вижу ту же проблему. По умолчанию он перетаскивает все файлы jar в каталог lib сервера. Что включает в себя объем "предоставленных" файлов jar. Эта проблема была исправлена ​​в старых версиях m2eclipse. Но он снова появился.

Ответ 5

Quickfix:

Сделайте резервную копию .classpath и .project и .settings/org.eclipse.wst.common.component.

Запустите эту команду:

mvn eclipse:eclipse

Или щелкните правой кнопкой мыши по проекту в подменю Maven, у вас есть команда Обновить проект..., которая Я думаю, делает то же самое.

переиздавать.

Объяснение:

Вероятно, вы добавили все Maven Dependencies в качестве сборки развертывания в ваш проект. Это копирует все записи пути класса Maven в каталог WEB-INF/lib. Откройте файл .classpath(в корне вашего проекта), и вы, вероятно, найдете следующий 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>

Это означает, что в этом случае будет выполняться копирование КАЖДОГО .jar файла.

Обновление проекта должно удалить XML-блок выше и явно указать файлы JAR.

Итак, если вы снова откроете .classpath, вы увидите это вместо:

<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"/>
...

Это для пути к классу, который вам по-прежнему нужен, но он удалил зависимость, чтобы скопировать их в lib. Вместо этого, если вы откроете .settings/org.eclipse.wst.common.component/, вы увидите, что JAR файлы теперь явно перечислены:

<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>

И вы заметите, что теперь отсутствует jsp-api-2.1.jar. Примените ту же логику к другим JAR файлам.

Кто-нибудь знает, как сделать это автоматически?

Ответ 6

платформа: eclipse 3.7 indigo, tomcat 6.0.29
прокомментировали следующие зависимости в pom.xml:

javax.servlet  
org.apache.taglibs  

это устранило проблему (поскольку они предоставляются через tomcat)...

Ответ 7

Я согласен с ответом Джей. У меня такая же проблема. Если я удалю jsp-api из pom.xlm, тест maven завершится неудачно, потому что он не может найти класс jspWriter в jsp-api jar. Если я сохраняю jsp-api в pom и устанавливаю его в "предоставленный" или "тест", сторона tomcat будет терпеть неудачу, так как плагин m2e подталкивает jsp-api jar к зависимостям maven, которые затем включаются в мою развернутую libc tomcat. Я бы сказал, что это проблема с плагином, поскольку jsp-api должен быть объявлен в pom.xml как предусмотрено, потому что он предоставляется серверами приложений. Я не могу найти способ решить эту проблему, но вручную удалять jsp-api каждый раз после синхронизации сервера tomcat.

Ответ 8

С Eclipse убедитесь, что вы установили 'Maven Integration для Eclipse WTP С помощью другого плагина без WTP, eclipse изменит ваш путь к классу и включит servlet-api.jar в ваших веб-приложениях.

Ответ 9

Вы должны исключить зависимость jsp-api от импорта jstl в 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>

Ответ 10

Удалено jsp-api 2.0 из .metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MyProject/WEB-INF/Library/ это сработало для меня.

Ответ 11

Я получал ту же ошибку в netbeans IDE 8.0.2. Оказывается, моя часть была установлена ​​на 8080 для исходящих и выключения. Я изменил исходящий на 8081 сервер Tomcat. Это сработало! Затем я изменил свой порт отключения 8005. Чтобы перейти в "Сервис" > "Серверы" >

Теперь работает мой сервер tomcat.