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



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



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



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



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



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



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



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

645   22  

22 ответов:

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

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

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

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

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

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

попробуйте переключить URI сверху на:

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

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

У меня была та же проблема с полосами taglib uri, показанными как не найденные. Я использовал Indigo и Maven, и когда я проверил Properties->Java Build Path->Order & Export Tab, я обнаружил (на новой проверке проекта), что флажок "Maven Dependencies" по какой-то причине был снят. Просто установите этот флажок и выполните чистую установку 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 Module Dependencies) они будут скопированы в папку WEB-INF/lib, где Eclipse также ищет определения тегов lib.

Я надеюсь, что это помогает.

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

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

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

  1. jstl.банку
  2. стандартные.банку

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

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

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

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

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

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

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

  2. Если tld не имеет <uri> элемент, контейнер будет пытаться использовать uri атрибут в директиве taglib как путь к фактическому дву. например, я мог бы иметь пользовательский файл 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 Tiles на "s". Мне также пришлось сделать то же самое в разделе 'Project/MyEclipse/Web/Configure workspace settings.../ Библиотеки Тегов'.

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

В разделе STS щелкните правой кнопкой мыши на проекте, чем "свойства", "фасеты проекта", чем в правой части окна перейдите на вкладку "runtime" и установите флажок " 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, то, конечно, он не будет предоставлять их обоих, ошибка, которую я сделал, заключается в том, что я поставил только первый, но если вы используете полный сервер приложений стека, т. е. glassfish, то glassfish будет иметь их обоих уже внутри.

для меня эта ошибка возникает всякий раз, когда я пытаюсь использовать новую версию eclipse. По-видимому, новое затмение сбрасывает M2_REPO переменная и я получаю все ошибки библиотеки тегов в Marker просмотр (иногда с ошибками проверки 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, т. е. в \webapps\examples\WEB-INF\lib и lib папка.

Comments

    Ничего не найдено.