我将从 6.0.44 升级到 Apache Tomcat 8.5.15。当我启动 Web 服务器并部署 Web 应用程序时,我收到来自
org.apache.tomcat.util.scan.StandardJarScanner.scan
的大量警告,其中包含以下消息
Failed to scan [file:/path/to/apache-tomcat/lib/lib/tomcat-jaspic-api-8.5.15.jar] from class loader hierarchy
java.io.FileNotFoundException: /path/to/apache-tomcat/lib/lib/tomcat-jaspic-api-8.5.15.jar (No such file or directory)
我不明白为什么扫描仪要在
apache-tomcat/lib
内部查找另一个名为 lib
的目录,该目录不存在。我的 CATALINA_HOME
设置为 /path/to/apache-tomcat
并且 common.loader
中的 catalina.properties
属性设置为默认值:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
我知道可以安全地忽略该警告,而不会影响 Web 应用程序,并且我可以在 apache-tomcat/conf/context.xml
lib/lib
奇怪现象背后的原因。
查看正在扫描的每个库,从 Tomcat 的 lib/ 目录中的库开始,尤其是您可能添加的非默认库。检查每个 MANIFEST.MF 中的类路径条目,包括缺少的库之一,例如“lib/tomcat-jaspic-api-8.5.15.jar”
lib/badlibs.jar
Class-Path: lib/notthere.jar lib/missing.jar
在我的例子中,一个旧的本地开发的库位于 $CATALINA_BASE/lib 中,具有以下类路径:
Class-Path: lib/servlet-api.jar lib/juli-6.0.26.jar lib/catalina.jar
导致错误:
StandardJarScanner.processURLs Failed to scan [file:${catalina.base}/lib/lib/juli-6.0.26.jar] from classloader hierarchy
需要进行一些代码清理。