Eclipse "не может найти дескриптор библиотеки тегов" для пользовательских тегов (а не JSTL!)

У меня есть проект Java EE, который отлично работает с Ant, отлично подходит для JBoss и работает без проблем. Этот проект включает несколько пользовательских библиотек тегов (которые не являются JSTL!), Которые также работают без каких-либо трудностей.

Проблема с Eclipse IDE (Ganymede): в каждом отдельном JSP файле, который использует наши пользовательские теги, JSP-парсер с флагом taglib включает строку с ошибкой "Не удается найти дескриптор библиотеки тегов для (пример).tld"

Это также означает, что любое использование библиотеки вкладок должно быть помечено как ошибка, а поскольку среда IDE не имеет своего определения, она не может проверить параметры тегов и т.д.
Наши отлично работающие JSP файлы - это море красных ошибок, и мои глаза начинают гореть.

Как я могу просто сказать Eclipse "Идентификатор библиотеки тегов, который вы ищете, - это src/web/WEB-INF/(пример) -taglib/(example).tld"?

Я уже задавал этот вопрос на форумах поддержки Eclipse без каких-либо полезных результатов.

Ответ 1

Оказывается, причина в том, что этот проект не рассматривался Eclipse на самом деле вообще как проект Java EE; это был старый проект от 3.1, и теперь Eclipse 3.5, который мы используем, требует, чтобы в файле конфигурации проекта было задано несколько "натур".

<natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>InCode.inCodeNature</nature>
    <nature>org.eclipse.dltk.javascript.core.nature</nature>
    <nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
    <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
</natures>

Мне удалось найти причину, создав новый "Динамический веб-проект", который правильно читал его JSP файлы и отличался от конфигурации старого проекта.

Единственный способ, который я мог бы добавить, - это отредактировать файл .project, но после повторного открытия проекта все магически сработало. Настройки, на которые ссылается pribeiro, выше, не нужны, поскольку проект уже соответствует настройкам по умолчанию.

Как ответы pribeiro, так и nitind дали мне идеи, чтобы ускорить поиск, спасибо.

Есть ли способ редактировать эти "натуры" из пользовательского интерфейса?

Ответ 2

В Eclipse Helios "Зависимости модуля Java EE" в свойствах проекта была заменена "Сборка развертывания".

Итак, для решения этой проблемы с Eclipse Helios, как я это сделал, это следующее:

  • Щелкните правой кнопкой мыши по проекту в проводнике пакетов и выберите "Импорт..."
  • Примите выбор по умолчанию "Файловая система" и нажмите "Далее"
  • Нажмите "Обзор" в строке "От", перейдите к вашей установке tomcat и найдите файл webapps/examples/WEB-INF/lib (у меня есть tomcat 6, другие версии Tomcat могут иметь путь webapps/jsp-examples/WEB-INF/Библиотека). Как только на пути нажмите OK.
  • Нажмите, кроме jstl.jar и standard.jar, чтобы активировать флажки
  • В строке В папку нажмите "Обзор" и выберите папку библиотеки. Я использую /lib внутри проекта.
  • Нажмите "Готово"
  • Щелкните правой кнопкой мыши по проекту в представлении Проводника пакетов и выберите свойства (или нажмите Alt + Enter)
  • Нажмите "Путь сборки Java"
  • Нажмите "Добавить банку", нажмите на свой проект, папку lib, выберите jstl.jar, нажмите OK
  • Нажмите "Добавить банку", нажмите на свой проект, папку lib, выберите standard.jar, нажмите OK
  • Нажмите OK, чтобы закрыть диалоговое окно свойств
  • Нажмите "Просмотр проблем" и выберите сообщение "Classpath entry.../jstl.jar не будет экспортировано или опубликовано. Может возникнуть Runtime ClassNotFoundExceptions".
  • Щелкните правой кнопкой мыши на нем и выберите "Быстрое исправление".
  • Принять значение по умолчанию "Отметить связанную исходную запись класса пути как зависимость публикации/экспорта" и нажать "Готово".
  • Сделайте то же самое для standard.jar

Это решает проблему, но если вы хотите проверить, что произошло в "Агрегате развертывания", снова откройте свойства проекта, выберите "Сборка развертывания", и вы увидите, что были добавлены стандартные .jar и jstl.jar в папку WEB-INF/lib.

Ответ 3

Это была моя проблема и как я ее исправил...

Я сделал все, о чем упомянул выше и т.д., но все еще получал эту ошибку. Оказывается, я использовал uri http://java.sun.com/jsp/jstl/fmt и http://java.sun.com/jsp/jstl/core, которые были неправильными.

Попробуйте перевести uris сверху на:

http://java.sun.com/jstl/fmt
http://java.sun.com/jstl/core

Кроме того, убедитесь, что у вас есть правильные баны, указанные в вашем пути к классу.

Ответ 4

У меня была такая же проблема с полосками taglib uri, пока они не были найдены. Я использовал Indigo и Maven, и когда я проверил Properties- > Java Build Path- > Order and Export Tab, я нашел (при новой проверке проекта), что флажок "Maven Dependencies" был снят по какой-либо причине. Просто проверив это поле и выполнив чистую установку Maven, все ошибки были удалены.

Интересно, почему Eclipse не предполагает, что мне нужны мои зависимости Maven в пути сборки...

Ответ 5

В этой же проблеме я использую maven, поэтому я добавил это в pom в свой веб-проект:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version> <!-- just used the latest version, make sure you use the one you need -->
    <scope>provided</scope>
</dependency>

Это устранило проблему, и я использовал "предоставленную" область, потому что, как OP, все уже работало в JBoss.

Здесь, где я нашел решение: http://alfredjava.wordpress.com/2008/12/22/jstl-connot-resolved/

Ответ 6

Когда я попытался включить основную библиотеку JSTL в свой JSP:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

В Eclipse (Indigo) появилась следующая ошибка:

Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"

Я пошел в Project Properties → Targeted Runtimes, а затем проверил сервер, который я использовал (Geronimo 3.0). Большинство людей будут использовать Tomcat. Это решило мою проблему. Надеюсь, это поможет!

Ответ 7

Многое зависит от того, что это за проект. Поддержка WTP JSP ожидает, что файлы JSP будут находиться в той же папке, что и родительская папка WEB-INF (src/web, которую она будет обрабатывать как "/", чтобы найти TLD), или чтобы метаданные проекта были настроены на помогите ему узнать, где этот корень (выполнен для вас в динамическом веб-проекте через сборку развертывания). Как вы относитесь к файлу TLD и где находится файл JSP?

И, возможно, я пропустил исходное сообщение на форумах Eclipse; тот, который я видел, был опубликован через день после этого.

Ответ 8

Я исправил эту проблему сегодня.

  • Измените свой выходной каталог на папку WEB-INF/classes. (Project/Properties/Java Build Path, папка с выходом по умолчанию)
  • Назначить зависимости модуля. (Project/Properties/Java EE Module Dependencies), они будут скопированы в папку WEB-INF/lib, где Eclipse также ищет определения тегов lib.

Надеюсь, это поможет.

Ответ 9

Проверьте две библиотеки в F:\apache-tomcat-7.0.21\webapps\examples\WEB-INF\lib:

  • jstl.jar
  • standard.jar

Ответ 10

У меня была такая же проблема. Это то, что я сделал для решения проблемы.

  • Выберите проект и щелкните правой кнопкой мыши.
  • Нажмите на свойства.
  • Перейдите на вкладку библиотек.
  • Нажмите "Добавить банки".
  • Добавьте соответствующую банку для вашей ошибки.

Ответ 11

Вы можете просто перейти в "Путь сборки" → "Добавить библиотеки", а для типа библиотеки добавить "Время выполнения сервера". Нажмите "Далее" и выберите время выполнения сервера, чтобы добавить путь к классу, и проблема исчезнет, ​​если jstl.jar и standard.jar находятся в вашем пути к классу сервера.

Ответ 12

Я использую плагин Spring STS и проект шаблона webmvc Spring. Сначала мне нужно было установить плагин Maven m2e: http://www.eclipse.org/m2e/

И затем очистите проект. В разделе Project -> Clean...

Ответ 13

Если ваш tld находится в пути к классам, обычно в каталоге WEB-INF, следующие два совета должны решить проблему (независимо от настройки вашей среды):

  • Убедитесь, что <uri> в TLD и uri в директиве taglib ваших jsp-страниц совпадают. Элемент <uri> tld - это уникальное имя для библиотеки тегов.

  • Если tld не имеет элемента <uri>, контейнер будет пытаться использовать атрибут uri в директиве taglib как путь к фактическому TLD. например. Я мог бы иметь собственный tld файл в моей папке WEB-INF и использовать путь к этому tld как значение uri в моем JSP. Однако это плохая практика, и ее следует избегать, поскольку пути затем будут жестко закодированы.

Ответ 14

У меня была та же проблема с MyEclipse и Eclipse 6.6.0. Это красное выравнивание значения uri в каждом

<%@ taglib prefix="s" uri="/struts-tags"%>. Я исправил его, перейдя в "Project/MyEclipse/Web/Tag Libraries" и установив префикс TLD по умолчанию для Struts 1.2 Tiles Tags to 's'. Я также должен был сделать то же самое в разделе "Project/MyEclipse/Web/Настройка параметров рабочей области.../Библиотеки тегов".

Ответ 15

У меня была та же проблема с STS (исходный пакет Springtool).

В STS, щелкните правой кнопкой мыши по проекту, чем "Свойства", "Границы проекта", а справа от окна нажмите вкладку "Время выполнения" и отметьте "VMware vFabric tc Server (...)"., и нажмите "Применить", и после обновления рабочей области он будет в порядке.

Ответ 16

У меня была такая же проблема с Tomcat 6.0 и Eclipse, и я опробовал то, что предложил мой друг, и это сработало для меня. Ссылка на вопрос, который я задал, и мой ответ прокомментирован, можно найти здесь:

JSTL Tomcat 6.0 Не удается найти дескриптор taglib Error

Сообщите мне, если это решит проблему "Невозможно найти дескриптор taglibrary".

Ответ 17

хорошо вам нужно понять, что всегда есть две вещи: API и реализация (помните формат gradle следующего кода)

compile group:'javax.servlet.jsp.jstl', name:'javax.servlet.jsp.jstl-api', version:'1.2.1'

compile group:'org.glassfish.web', name:'javax.servlet.jsp.jstl',version:'1.2.1'

Поэтому, если вы используете контейнер сервлета без поддержки jstl, то, конечно, он не будет предоставлять оба из них, ошибка, которую я сделал, заключается в том, что я помещаю только первый, но если вы используете приложение полного стека сервер, то есть стеклянная рыба, тогда у стеклянной рыбы они уже будут внутри.

Ответ 18

Для меня эта ошибка возникает, когда я пытаюсь использовать новую версию eclipse. По-видимому, новое затмение сбрасывает переменную M2_REPO, и я получаю всю ошибку библиотеки тегов в представлении Marker (иногда с ошибками проверки ejb).

После обновления переменной M2_REPO, чтобы указать на фактическое местоположение репозитория maven, требуется 2-3 Project → Clean iterations, чтобы все работало.

И иногда есть некоторые ошибки проверки xml (ejb) вместе с ошибками библиотеки тегов. Ручное обновление соответствующего XML файла инициирует поиск файла *.xsd и устраняют ошибки проверки xml. В этом случае ошибки библиотеки тегов также исчезают.

Ответ 19

С другой стороны, если вы работаете только с источником java и получаете эти ошибки из-за того, что вы не касаетесь большого работающего проекта, вы можете просто отключить проверки в Eclipse. Настройки находятся в разделе "Настройки" → "Веб файлы" - "Файлы JSP" → "Проверка"

Ответ 20

Эта ошибка может возникнуть из нескольких разных источников. Один случай (не упомянутый в других ответах на этот вопрос) возникает, когда Eclipse не реализует версию спецификации JSP, заданную в документе TLD. Заявления Eclipse обычно отстают от года до внедрения новых сервлетов и спецификаций JSP. См. эту ошибку Eclipse, например.

В этом случае ваше веб-приложение может работать нормально в последней версии Tomcat, но Eclipse все еще может жаловаться на отсутствие TLD. Кратковременное решение (не считая ошибки в Eclipse) заключается в том, чтобы уменьшить версию JSP до версии, поддерживаемой вашей версией Eclipse.

Кроме того, имейте в виду версию TLD, которую вы реализуете. Имена тегов немного изменились с v1.1 до v2.0 (т.е. info теперь description на taglib и не является допустимым элементом в tag, многие имена элементов теперь содержат дефис), Eclipse не имеет допусков для имен тегов с орфографическими ошибками.

TLD 2.0 (jsp-версия 2.0) Ссылка

TLD 2.1 (jsp-версия 2.3) Ссылка

Ответ 21

заменить jstl.jar на jstl1.2.jar, разрешил проблему для tomcat 7.0

Ответ 22

Я также столкнулся с той же проблемой. Убедитесь, что у вас одинаковые версии JSTL в Eclipse и в рабочем каталоге Tomcat, т.е. В папке \webapps\examples\WEB-INF\lib и lib.