Java 可以在Tomcat中关闭taglib扫描吗?

Java 可以在Tomcat中关闭taglib扫描吗?,java,tomcat,taglib,Java,Tomcat,Taglib,启动时,Tomcat递归地扫描WEB-INF目录中的TLD(标记库描述符)文件。因此,如果一个webapp在该目录下有很多文件,它会减慢启动过程。有人知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围吗?您可以在上下文中添加processTlds属性 <Context processTlds="false" ... /> 但是,如果不扫描JAR,JAR文件中定义的TLD将无法工作。您必须在WEB-INF中定义所有TLD。作为替代方案(如果您仍然喜欢

启动时,Tomcat递归地扫描WEB-INF目录中的TLD(标记库描述符)文件。因此,如果一个webapp在该目录下有很多文件,它会减慢启动过程。有人知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围吗?

您可以在上下文中添加processTlds属性

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


但是,如果不扫描JAR,JAR文件中定义的TLD将无法工作。您必须在WEB-INF中定义所有TLD。

作为替代方案(如果您仍然喜欢扫描一些JAR),您可以在“{tomcat_HOME}/conf/catalina.properties”中的“tomcat.util.scan.DefaultJarScanner.jarsToSkip”属性中添加新值。

我对同样的问题感到困惑。查看Tomcat 7.0.40的源代码,设置'processTlds=false'无法避免JAR扫描,它们仍将被扫描web片段(ContextConfig.processJarsForWebFragments())

还有两种选择:

在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类在tomcat的lib目录中可用,而不是在tomcat 8上的.war

,可以通过在war文件中添加带有如下配置的
META-INF\context.xml
来解决。 无需更改全局Tomcat配置



此处提供了相关文档:

是否有办法只指定要扫描的特定JAR?但是如果删除一些JAR,它们将无法正确计算,是吗?@Aerox我不太理解您的问题?您是否想指出,如果这样做,将找不到标记库描述符?如果是这样,这对我的案例来说不是(现在也不是)问题,因为我没有使用JSP。我假设您使用JSP页面,所以我说,如果您完全关闭扫描,如果需要一些特定的JAR来进行干净的启动,我想您无法构建它。如果您没有使用JAR,可能不是这样,是吗?这在Tomcat7中是新的,对吗?就我而言,我仍然使用Tomcat6,但对于Tomcat7用户来说,这似乎是一个不错的选择。是的。不适用于Tomcat 6。属性出现在Tomcat 7中。似乎是Tomcat 7属性。您知道我为什么会出现此错误吗?“将属性'processTlds'设置为'false'未找到匹配的属性。”这是因为我在全局Tomcat/conf/context.xml中添加了该属性吗?即使我从/conf/context.xml中删除了该属性并将其添加到META-INF/context.xml中,也会出现相同的消息(“无匹配属性”)。Tomcat 8.5不支持此属性吗?