如何修复Tomcat 9.0.0M10中“已扫描但未在其中找到TLD的JAR”

我是Java EE的新手,并尝试使用ServletContextListener,而侦听器作业是连接到数据库bla bla。当我尝试启动服务器(Tomcat 9)时,它仍然存在:

“信息:至少有一个JAR被扫描用于尚未包含TLD的TLD。启用此记录器的调试日志记录,以获取已扫描但未找到TLD的完整JAR列表。在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。“

所以我改变了“Logging properties file”中的一些属性,如下所示:

# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler .handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ 1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 2localhost.org.apache.juli.AsyncFileHandler.level = FINE 2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 3manager.org.apache.juli.AsyncFileHandler.level = FINE 3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. java.util.logging.ConsoleHandler.level = FINE java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = FINE org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = FINE org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler # For example, set the org.apache.catalina.util.LifecycleBase logger to log # each component that extends LifecycleBase changing state: #org.apache.catalina.util.LifecycleBase.level = FINE # To see debug messages in TldLocationsCache, uncomment the following line: org.apache.jasper.compiler.TldLocationsCache.level = FINE org.apache.jasper.servlet.TldScanner.level = FINE # To see debug messages for HTTP/2 handling, uncomment the following line: #org.apache.coyote.http2.level = FINE # To see debug messages for WebSocket handling, uncomment the following line: #org.apache.tomcat.websocket.level = FINE 

所有答案均可接受 谢谢大家。

这不是tomcat中的错误或任何问题。 Tomcat只是告诉您有些jar子不包含TLD,您可以将它们添加到扫描仪的跳过列表中以提高启动性能。 所以你有两个选择:

  1. 您可以放心地忽略该提示。 然而,如果它让您烦恼,您可以将该特定记录器设置为更高的日志记录级别,从而防止tomcat记录它。 只需将org.apache.jasper.servlet.TldScanner.level = SEVERE添加到logging.properties的末尾即可。

  2. 启用调试日志记录以使tomcat列出这些jar并将它们添加到跳过列表中。 组:

     org.apache.jasper.compiler.TldLocationsCache.level = FINE org.apache.jasper.servlet.TldScanner.level = FINE 

并在tomcat_dir / conf / catalina.properties中将打印的jar名称(不带路径)添加到tomcat.util.scan.StandardJarScanFilter.jarsToSkip=...

将记录设置为FINE,FINEST或ALL以查找要排除的所有jar子不是必需的。

这是一个脚本,可以找到所有不包含TLD的jar(更改TOMCAT_HOME变量以匹配您的安装)并在表单上输出一个列表

 jar1.jar,\ jar2.jar,\ ... 

可以粘贴到catalina.properties中(省略最后一个’,\’):

 #!/bin/sh TOMCAT_HOME=/opt/tomcat for i in `find $TOMCAT_HOME -follow -name "*jar"` do jar tvf $i | grep -i tld > /dev/null if [ $? -ne 0 ]; then echo "$(basename $i),\\" fi done 

但是,如果我被正确通知,tomcat 9中有可能通过更改(在catalina.properties中)排除所有jar:

 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ 

 tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar 

(注释掉下面的行中的列表),然后通过更改以下内容来覆盖包含TLD的jar子的决定:

 tomcat.util.scan.StandardJarScanFilter.jarsToScan=\ log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar 

并添加通过修改上面的脚本获得的列表,以列出包含TLD的jar:

 #!/bin/sh TOMCAT_HOME=/opt/tomcat for i in `find $TOMCAT_HOME -follow -name "*jar"` do jar tvf $i | grep -i tld > /dev/null if [ $? -eq 0 ]; then echo "$(basename $i),\\" fi done 

同样的问题我被修复了..我认为这有权限问题,所以需要为webapps / project文件夹提供完全访问权限。