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

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

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

Cannot find the tag library descriptor for (example).tld

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

наши отлично работающие файлы JSP-это море красных ошибок, и мои глаза начинают гореть.

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

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

22 ответов


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

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

  • щелкните правой кнопкой мыши проект в проводнике пакетов и выберите "Импорт..."
  • примите выбор по умолчанию "файловая система "и нажмите"Далее"
  • нажмите "Обзор" в строке из каталога, перейдите к установке tomcat и найдите файл веб-приложений/примеры/веб-инф/Либ (я имею в Tomcat 6, другие версии Tomcat может иметь путь веб-приложений/ОСП-примеры/веб-инф/Либ). После того, как в пути нажмите OK.
  • нажмите помимо jstl.jar и стандарт.jar для активации флажков
  • в строке "в папку" нажмите "Обзор" и выберите папку "Библиотека". Я использую /lib внутри проекта.
  • Нажмите Кнопку "Готово"
  • щелкните правой кнопкой мыши проект в представлении проводника пакетов и выберите Свойства (или нажмите Alt + Enter)
  • нажмите "путь сборки Java"
  • нажмите "Добавить банку", нажмите на свой проект, папку lib, выберите jstl.jar, нажмите OK
  • нажмите "Добавить банку", нажмите на свой проект, папку lib, выберите стандарт.jar, нажмите OK
  • нажмите OK, чтобы закрыть диалоговое окно Свойства
  • нажмите на "проблемы" и выберите сообщение "запись classpath .../тегов JSTL.jar не будет экспортироваться или публиковаться. Runtime ClassNotFoundExceptions может привести.".
  • щелкните правой кнопкой мыши на нем и выберите "быстрое решение".
  • примите значение по умолчанию "отметьте связанную запись raw classpath как зависимость публикации / экспорта" и нажмите Finish.
  • сделайте то же самое для стандарта.Джар

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


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

Я сделал все, что все упомянутые выше и т. д. но все равно получал эту ошибку. Оказывается, я использовал 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

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


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

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


оказывается, причиной было то, что этот проект не рассматривался 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 и отличался от конфигурации старого проекта.

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

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

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


столкнулся с той же проблемой, я использую 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/


когда я попытался включить библиотеку ядра 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"

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


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

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

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


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

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


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

  1. тегов JSTL.Джар
  2. стандартные.Джар

Я столкнулся с той же проблемой. Вот что я сделал, чтобы решить эту проблему.

  1. выберите проект и щелкните правой кнопкой мыши.
  2. нажмите на "свойства".
  3. перейдите на вкладку библиотеки.
  4. нажмите "Добавить банки".
  5. добавить соответствующую банку для вашей ошибки.

вы можете просто перейти к пути сборки - > добавить библиотеки и для типа библиотеки Добавить выберите " Server Runtime."Нажмите" Далее " и выберите серверную среду выполнения для добавления в путь к классам, и проблема исчезнет, если jstl.jar и стандарт.опарник в classpath сервера.


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

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


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

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

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


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

<%@ taglib prefix="s" uri="/struts-tags"%>. Я исправил это, перейдя в "библиотеки Project/MyEclipse/Web/Tag" и установив префикс TLD по умолчанию для тегов плиток Struts 1.2 В "s". Мне также пришлось сделать то же самое в разделе " Project/MyEclipse/Web/Configure workspace settings.../Тег Библиотек.


У меня была такая же проблема с STS (springtool source suite).

В разделе STS щелкните правой кнопкой мыши на проекте, чем "свойства", "фасеты проекта", чем справа от окна нажмите на вкладку "время выполнения" и проверьте " VMware Vfabric TC Server (...) ", и нажмите "Применить", и это должно быть в порядке после обновления рабочей области.


ну, вам нужно понять, что всегда есть две вещи: 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, то, конечно, он не будет предоставлять оба из них, ошибка, которую я сделал, заключается в том, что я поставил только первый, но если вы используете полный стек application server i.e glassfish тогда glassfish будет иметь их обоих уже внутри.


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

после обновления M2_REPO переменная, чтобы указать на фактическое местоположение репозитория maven, требуется 2-3 проекта - > Чистые итерации, чтобы все работало.

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


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


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

JSTL Tomcat 6.0 не может найти ошибку дескриптора taglib

Дайте мне знать, если это решает вашу проблему "не удается найти дескриптор taglibrary".


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

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

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

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

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


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


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