Невозможно прочитать TLD "META-INF / c.tld" - PullRequest
18 голосов
/ 10 августа 2010

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

Tomcat 6.0.28
Затмение: Гелиос

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 с помощью менеджера, он работает нормально. Когда я запускаю его как «Запуск от имени> Запуск на сервере» внутри затмения, я получаю это:

Невозможно прочитать 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

Куда бы я ни посмотрел, там написано одно и то же:

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

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

Ответы [ 11 ]

16 голосов
/ 01 июля 2011

После того, как я перешел с помощью 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.

6 голосов
/ 04 октября 2010

удалить:
javax.servlet.jsp jsp-api 2.0 предоставил

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

5 голосов
/ 03 сентября 2010

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

4 голосов
/ 11 августа 2010

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

2 голосов
/ 16 ноября 2012

Quickfix:

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

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

mvn eclipse:eclipse

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

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

Пояснение:

Скорее всего, вы добавили все зависимости Maven как сборку развертывания в ваш проект. Это копирует все записи пути классов 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.

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

0 голосов
/ 10 апреля 2016

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

Мой сервер Tomcat теперь работает.

0 голосов
/ 18 сентября 2013

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

0 голосов
/ 14 марта 2013

Вы должны исключить зависимость 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>
0 голосов
/ 31 августа 2012

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

0 голосов
/ 13 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...