Что означает «INFO: TLD пропущен. URI уже определен»? - PullRequest
15 голосов
/ 04 января 2012

При запуске моего приложения JSF 2 в Eclipse я получаю несколько информационных журналов о том, что TLD был пропущен, потому что он уже определен следующим образом:

Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags/form is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined

Мне интересно узнать, что означает этот журнал?1004 *

Ответы [ 3 ]

11 голосов
/ 04 января 2012

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

Предполагая, что вы не коснулись ни папки appserver /lib, ни JDK /lib папки, затем эти дубликаты находятся в папке /WEB-INF/lib сборки WAR.Очистить его.

3 голосов
/ 16 ноября 2013

Порядок приоритетов URI, требуемый спецификацией:

J2EE platform taglibs - Tomcat doesn't provide these

web.xml entries

JARS in WEB-INF/lib & TLDs under WEB-INF (equal priority)

Additional entries from the container

Tomcat загружает tld дважды.

1, когда Tomcat запускается, он загружает tld для поиска слушателей в файлах tld.

2, когда компилируется первый jsp файл, он создает кеш из tld пар.

1, загружает tld для поиска слушателей в tld файлах

При загрузке из web.xml он помещает taglib-uri из web.xml и uri из файла tld в набор.При загрузке из WEB-INF или jar, URI из файла TLD.

Tomcat должен избегать добавления дубликатов слушателей tld, поэтому он проверяет, существует ли uri в наборе.Если uri уже существует, он регистрирует сообщения, которые вы публикуете , и пропускает добавление слушателя tld.

2, кэш сборки

1) web.xmlзаписи, тэг uri получен из web.xml

2) сканировать tld файлы в WEB-INF, тэг uri получен из tld files

3) сканировать jars, тэг uri естьПолучено из tld файлов.

Если uri aready существует, запись будет проигнорирована.

1 голос
/ 02 марта 2017

Например, если вы используете Tomcat и Maven (или другие серверы), вы отправляете библиотеку JSTL, которая уже найдена на сервере, и сервер жалуется.

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

Во время развертывания приложения (в Tomcat) вы получите сообщение об ошибке:

INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Mar 02, 2017 2:19:32 PM org.apache.catalina.startup.TaglibUriRule body

Решение состоит в том, чтобы использовать тег 'scope' и значение'предоставлено', поскольку JSTL уже поставляется с Tomcat (только для вашей IDE):

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>

Тогда ошибка исчезнет.

...