Можно ли отключить сканирование taglib в Tomcat?

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


person Matt Passell    schedule 28.09.2009    source источник
comment
Есть ли способ назначить только определенные банки, которые вы хотите отсканировать?   -  person    schedule 10.11.2011
comment
Но если вы удалите несколько банок, они не будут правильно вычисляться, не так ли?   -  person Aerox    schedule 29.05.2020
comment
@Aerox, я не совсем понимаю твой вопрос? Вы хотели указать, что если вы сделаете это, дескрипторы библиотеки тегов не будут найдены? Если да, то это не было (и до сих пор) проблемой для моего случая, потому что я не использовал JSP.   -  person Matt Passell    schedule 31.05.2020
comment
Я предполагал, что вы используете JSP-страницы, поэтому я сказал, что если вы полностью отключите сканирование, я полагаю, вы не сможете его построить, если для продолжения чистого запуска требуются определенные JAR-файлы. Если вы не использовали JAR-файлы, возможно, это не так, не так ли?   -  person Aerox    schedule 05.06.2020


Ответы (4)


Вы можете добавить атрибуты processTlds в контекст,

  <Context processTlds="false" ... />

Однако ваши TLD, определенные в файле JAR, не будут работать без сканирования файлов JAR. Вы должны определить все TLD в WEB-INF.

person ZZ Coder    schedule 28.09.2009
comment
Кажется, это атрибут Tomcat 7. - person Reto Höhener; 08.08.2017
comment
Вы знаете, почему я получаю эту ошибку? Установка для свойства «processTlds» значения «false» не нашла соответствующего свойства. Это потому, что я добавил свойство в глобальный Tomcat /conf/context.xml? - person Sorin Postelnicu; 12.01.2021
comment
То же самое сообщение («нет подходящего свойства») появляется даже после того, как я удалил свойство из /conf/context.xml и добавил его в META-INF/context.xml. Это свойство не поддерживается в Tomcat 8.5? - person Sorin Postelnicu; 13.01.2021

Я был озадачен той же проблемой. Глядя на исходный код Tomcat 7.0.40, невозможно избежать сканирования jar-файлов, установив «processTlds = false», они все равно будут сканироваться на наличие веб-фрагментов (ContextConfig.processJarsForWebFragments()).

Осталось 2 варианта:

Установите свойство в TOMCAT_HOME/conf/catalina.properties

org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar

Замените StandardJarScanner своей реализацией, например пустой, и обратитесь к ней из my.war/META-INF/context.xml:

<Context processTlds="false">
    <JarScanner className="org.my.tomcat.NullJarScanner"/>
</Context>

В последнем случае вам нужно убедиться, что класс NullJarScanner доступен в каталоге lib tomcat, а не в вашем .war

person Igor Semenko    schedule 28.06.2013

На Tomcat 8 это можно решить, добавив META-INF\context.xml с конфигурацией, показанной ниже, в ваш файл WAR. Нет необходимости изменять глобальную конфигурацию Tomcat.

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <JarScanner>
        <JarScanFilter tldSkip="*.*"/>
    </JarScanner>
</Context>

Соответствующая документация доступна здесь: http://tomcat.apache.org/tomcat-8.0-doc/config/jar-scan-filter.html

person Sergey    schedule 21.02.2017

В качестве альтернативы (если вы все еще предпочитаете сканировать некоторые JAR-файлы) вы можете добавить новые значения к свойству «tomcat.util.scan.DefaultJarScanner.jarsToSkip» в «{TOMCAT_HOME}/conf/catalina.properties».

person Vadim Ponomarev    schedule 12.04.2012
comment
Это новое в Tomcat 7, верно? В моем случае я все еще использую Tomcat 6, но для пользователей Tomcat 7 это выглядит хорошим вариантом. - person Matt Passell; 13.04.2012
comment
Да. Неприменимо к Tomcat 6. Свойство появляется в Tomcat 7. - person Vadim Ponomarev; 13.04.2012