一、文章前言
本文是亲测有效解决At least one JAR was scanned for TLDs yet contained no TLDs问题,绝对不是为了积分随便粘贴复制然后压根都没有用系列
二、问题描述
1.今天测试发现Tomcat启动贼慢,当然这个不是随机数问题,而是每次卡在At least one JAR was scanned for TLDs yet contained no TLDs这个位置要好半天,而且还是在只有一个项目的情况下!
2.参考别的文章说编辑logging.properties 文件,在文件末尾添加,org.apache.jasper.servlet.TldScanner.level = FINE,启动服务器,然后在控制台看到什么No的输出提示,保存在某一个文件中,然后接下来将文件中提示的jar包再添加到catalina.properties 文件中的 tomcat.util.scan.StandardJarScanFilter.jarsToSkip的后面,问题能暂时解决,然后你会发下以下几个问题
起作用了,但是当你新加一个jar包不符合规范,烦人的提示又开始了
只适用于服务器内项目已经固定了的情况,新建一个不同类项目问题又出现
3.想过直接关闭TLD检查,在 conf/context.xml的<Context>中添加processTlds="false"也不起作用
三、问题原因
1.出现这个问题的原因就是Tomcat启动时会扫描大量jar包,如果含有不符合TLD规范的就会出现这个问题
2.以后基本上不会使用JSP作为视图层,所以我们可能根本不需要TLD这个东西,就算不要TLD也没有什么关系
3.注意两个启动:一个是从tomcat的bin目录中启动,另外一个是从Eclipse中或者别的软件中启动,注意看Eclipse启动部分
四、问题解决
4.1 解决步骤
1.可以在Tomcat安装目录下apache-tomcat-9.0.1confcatalina.properties文件中看到有以下一串代码,代表的是在启动Tomcat需要跳过检查的jar包
2.那么解决办法就是跳过所以jar包的TLD检查,将所有tomcat.util.scan.StandardJarScanFilter.jarsToSkip=后面的所有通过连接的这些.jar全部删除(操作之前请备份源文件),直接给tomcat.util.scan.StandardJarScanFilter.jarsToSkip赋值"*.jar","*.jar"代表跳过所有以.jar结尾的文件,示例如下
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
3.删除tomcat的work目录中的所有文件避免缓存干扰;清空所有logs目录中的日志文件,为了方便查看日志文件
4.2 从Tomcat的Bin目录中启动服务器
1.现在到bin目录中找到startup.bat(windows:双击即可运行)或startup.sh(Linux:命令 "./startup.sh" 运行)进行启动,发现启动超快,只需要807毫秒
5.注意:这里只是直接在bin中启动了tomcat服务器,接下来是从Eclipse配置tomcat,通过Eclipse启动服务器
4.3 Eclipse启动Tomcat
1.如果原来就已经配置过该Tomcat的会发现在Eclipse中启动还是老样子,每次卡在TLD那里,感觉根本没有解决,原因如下
Eclipse没有使用配置过的Tomcat,而是使用了自带的Tomcat
Eclipse中原来配置过该Tomcat,因为Tomcat缓存导致没有生效
2. 接下在最重要的一步就是删除Eclipse原来配置过的服务器,单击右键选择删除即可
3.创建新的运行环境,改成现在新配置的Tomcat,这样才能让配置生效,配置Tomcat服务器参考文章:https://blog.csdn.net/sinat_34104446/article/details/82721884
4.创建新的服务器之后启动只要482ms