部署WAR文件时出现webservices-api.jar未找到的Tomcat扫描错误求助
我来帮你一步步排查解决这个问题——这个错误我之前碰到过好几次,本质都是Tomcat的类路径解析出了问题,咱们从这几个方向入手:
检查目标JAR是否真的存在
先去你Tomcat安装目录下的lib文件夹看看,有没有webservices-api.jar这个文件:- 如果不存在,要么是Tomcat安装不完整(比如解压包时丢了文件),要么是这个JAR被误删除了。解决办法:
- 下载和你当前Tomcat版本匹配的安装包,从里面的
lib目录复制这个JAR到你的Tomcatlib文件夹; - 如果你确定项目不需要这个JAR,可以检查项目依赖(比如Maven的pom.xml),看看是不是不小心引入了多余的依赖,把它排除掉。
- 下载和你当前Tomcat版本匹配的安装包,从里面的
- 如果不存在,要么是Tomcat安装不完整(比如解压包时丢了文件),要么是这个JAR被误删除了。解决办法:
验证CATALINA_HOME环境变量是否正确配置
Tomcat的很多路径解析都依赖CATALINA_HOME环境变量,如果这个变量没设置或者设置错误,就会导致Tomcat默认去/tomcat/lib这种错误路径找文件:- Linux/macOS:打开终端,执行
echo $CATALINA_HOME,看看输出是不是你的Tomcat根目录。如果不对,在~/.bashrc(或~/.zshrc)里添加export CATALINA_HOME=/path/to/your/tomcat,然后重启终端和Tomcat; - Windows:右键"此电脑"→"属性"→"高级系统设置"→"环境变量",检查有没有
CATALINA_HOME变量,值是不是你的Tomcat根目录,没有的话新建一个,然后重启Tomcat服务。
- Linux/macOS:打开终端,执行
修改Tomcat的JarScanner配置,跳过不存在的JAR
如果上面两步都没问题,可能是Tomcat的JarScanner硬要扫描这个不存在的JAR。你可以修改conf/context.xml文件,添加JarScanFilter来跳过它:
打开conf/context.xml,在<Context>标签内添加:<JarScanner> <JarScanFilter defaultPluggabilityScan="false" tldSkip="webservices-api.jar"/> </JarScanner>这样Tomcat就会跳过扫描这个JAR,避免抛出错误。
检查项目依赖的scope配置
如果你的项目是用Maven/Gradle构建的,看看webservices-api的依赖范围是不是设错了:- 如果这个API是Tomcat本身应该提供的(比如JAX-WS相关的API),把依赖的
scope设为provided,这样打包时不会把它打进WAR包,Tomcat会用自己的版本; - 如果是多余的依赖,直接从配置文件里删掉就行。
- 如果这个API是Tomcat本身应该提供的(比如JAX-WS相关的API),把依赖的
补充说明:
StandardJarScanner是Tomcat用来扫描类路径下JAR文件,查找TLD标签库、注解等资源的组件,当它找不到配置中指定的JAR时,就会抛出这个FileNotFoundException。错误里的//tomcat/lib路径说明路径解析时没有正确关联到你的Tomcat实际安装目录,这也是排查的核心方向。
内容的提问来源于stack exchange,提问作者All_Safe

