Tomcat控制台提示至少有一个JAR被扫描用于TLD但尚未包含TLD
现象
Tomcat控制台提示:
信息 [RMI TCP Connection(3)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
解决方式
控制台打印的是提示级别的日志,其实描述已经很清楚:项目中存在被用于扫描TLD文件的JAR包,但由于没包含TLD文件,其实是一个白白增加启动时间和JSP编译时间的过程。
可见这个日志信息,是一个优化性能的提示,即使不处理也不会有严重的影响。处理步骤:
找出具体是哪些JAR包,被用于扫描TLD文件但没包含TLD文件
设置相关日志的打印级别:
往Tomcat目录下的
conf/logging.properties
文件中添加内容:org.apache.jasper.servlet.TldScanner.level = FINE
。保存后,重启Tomcat,控制台就能将被用于扫描TLD的JAR包打印出来。例如:
1
2
3
427-Mar-2022 16:56:04.706 详细 [RMI TCP Connection(4)-127.0.0.1] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan 在file:/C:/Users/Hunter/IdeaProjects/javaweb-jsp/target/javaweb-jsp-1.0-SNAPSHOT/WEB-INF/lib/jakarta.activation-2.0.0.jar中找不到TLD文件。考虑将JAR添加到CATALINA_BASE/conf/CATALINA.properties文件中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip属性。
27-Mar-2022 16:56:04.769 详细 [RMI TCP Connection(4)-127.0.0.1]
org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan 在JAR[file:/C:/Users/Hunter/IdeaProjects/javaweb-jsp/target/javaweb-jsp-1.0-SNAPSHOT/WEB-INF/lib/jakarta.servlet.jsp.jstl-2.0.0.jar]中找到了TLD文件。
27-Mar-2022 16:56:04.769 详细 [RMI TCP Connection(4)-127.0.0.1] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan 在file:/C:/Users/Hunter/IdeaProjects/javaweb-jsp/target/javaweb-jsp-1.0-SNAPSHOT/WEB-INF/lib/jakarta.xml.bind-api-3.0.0.jar中找不到TLD文件。考虑将JAR添加到CATALINA_BASE/conf/CATALINA.properties文件中的tomcat.util.scan.StandardJarScanFilter.jarsToSkip属性。整理涉及的没包含TLD的JAR包,使其跳过扫描
按照日志的提示,将没包含TLD文件的JAR包添加到Tomcat目录下
conf/catalina.properties
文件中tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
处,可使用模糊匹配:1
2
3
4
5
6# 本例中涉及的不包含TLD文件的都是jakarta开头的JAR包
# 添加到最后
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
annotations-api.jar,\
xom-*.jar,\
jakarta.*.jar日志打印出的含有TLD文件的JAR包,如果也能被
jarsToSkip
的JAR包模糊匹配到,需要显式声明扫描该JAR包,否则项目运行仍然会报错。将能被
jarsToSkip
的JAR包模糊匹配到的,包含TLD文件的JAR包添加到Tomcat目录下conf/catalina.properties
文件中tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
处,可使用模糊匹配:1
2
3
4
5
6
7
8# 本例中,涉及的JAR包是 jakarta.servlet.jsp.jstl-2.0.0.jar
# 添加到最后
tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
log4j-taglib*.jar,\
log4j-web*.jar,\
log4javascript*.jar,\
slf4j-taglib*.jar,\
jakarta.servlet.jsp.jstl-2.0.0.jar保存设置,重启Tomcat,控制台不再有该提示。
最后,记得还原
conf/logging.properties
文件中对日志打印级别的变更。