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

StackOverflow https://stackoverflow.com/questions/1265309

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение 4

Оказывается, причина заключалась в том, что 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, но после повторного открытия проекта все волшебным образом заработало.Настройки, на которые ссылается Прибейро выше, не были необходимы, поскольку проект уже соответствовал настройкам по умолчанию.

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

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

Другие советы

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

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

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

Это решает проблему, но если вы хотите проверить, что произошло в «Сборке развертывания», снова откройте свойства проекта, выберите «Сборка развертывания», и вы увидите, что в WEB добавлены файлы Standard.jar и jstl.jar. Папка 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

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

У меня была та же проблема с полосами taglib uri, которые отображались как не найденные.Я использовал Indigo и Maven, и когда я проверил Свойства->Путь сборки Java->Вкладка «Порядок и экспорт», я обнаружил (при проверке нового проекта), что флажок «Зависимости Maven» по какой-то причине снят.Простая установка этого флажка и выполнение чистой установки Maven устранили все ошибки.

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

Столкнулся с той же проблемой: я использую 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.(Проект/Свойства/Путь сборки Java, папка вывода по умолчанию)
  • Назначьте зависимости модуля.(Проект/Свойства/Зависимости модуля Java EE) они будут скопированы в папку WEB-INF/lib, где Eclipse также ищет определения тегов lib.

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

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

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

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

  1. jstl.jar
  2. стандарт.jar

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

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

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

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

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

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

  1. Убедитесь, что <uri> в TLD и uri в директиве taglib ваших jsp-страниц совпадают.Тот самый <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 Libraries» и установив для префикса TLD по умолчанию для тегов плиток Struts 1.2 значение «s».Мне также пришлось сделать то же самое в разделе «Проект/MyEclipse/Web/Настроить настройки рабочей области.../Библиотеки тегов».

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

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

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

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 тогда стеклянная рыба будет иметь их обоих уже внутри.

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

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

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

С другой стороны, если вы работаете только с исходным кодом Java и получаете эти ошибки от вещей, которые вы не затрагиваете в большом работающем проекте, вы можете просто отключить проверки в Eclipse.Настройки находятся в разделе «Настройки» -> «Интернет» -> «Файлы JSP» -> «Проверка».

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

JSTL Tomcat 6.0 Невозможно найти дескриптор библиотеки тегов. Ошибка.

Дайте мне знать, если это решит вашу проблему «Невозможно найти дескриптор библиотеки тегов».

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

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

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

TLD 2.0 (jsp-версия 2.0) Справочник

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top