You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 7.0.92搭配JDK11启动报错:无法处理tools.jar注解扫描

解决Tomcat 7 + JDK11启动时tools.jar扫描错误的方案

这个问题我之前也碰到过——Tomcat 7的Jar扫描逻辑在JDK11环境下会默认尝试查找tools.jar,但JDK11已经移除了这个文件(JDK9+采用模块化后,tools.jar的内容被整合到了系统模块里),所以才会抛出NoSuchFileException。你之前用jarsToSkip=*.jar没生效,大概率是因为这个配置没有覆盖到Tomcat对系统类路径中jar的扫描逻辑,下面给你几个可行的解决办法:

1. 精准跳过tools.jar的扫描

不用粗暴地跳过所有jar,直接在CATALINA_BASE/conf/catalina.properties里修改两个关键属性,确保Tomcat不会去扫描不存在的tools.jar:

# 针对ContextConfig的注解扫描跳过tools.jar
org.apache.catalina.startup.ContextConfig.jarsToSkip=tools.jar
# 针对默认JarScanner的扫描跳过tools.jar
tomcat.util.scan.DefaultJarScanner.jarsToSkip=tools.jar

如果之前已经有这两个属性,直接把tools.jar追加到现有值后面就行(用逗号分隔多个jar)。

2. 禁用不必要的注解扫描(适合不需要注解自动加载的应用)

如果你的Web应用不需要依赖Tomcat自动扫描注解来初始化组件,可以直接在应用的META-INF/context.xml(没有的话新建一个)里添加Jar扫描的禁用配置:

<Context>
    <!-- 完全禁用Jar扫描,避免Tomcat去扫系统类路径的jar -->
    <JarScanner scanClassPath="false" scanManifest="false"/>
</Context>

或者更精准地,只禁用注解相关的扫描:

<Context>
    <JarScanner>
        <JarScanFilter defaultJarScanFilter="false"/>
    </JarScanner>
</Context>

这个方法能从根源上阻止Tomcat去扫描任何jar的注解,自然也不会触发tools.jar的错误。

3. 升级Tomcat版本(长期最优解)

Tomcat 7虽然在7.0.92版本开始提供对JDK11的支持,但毕竟是比较老旧的版本,对JDK9+的模块化适配不够完善。如果条件允许,建议升级到Tomcat 9(和Tomcat 7的API兼容性较好,迁移成本低)或者Tomcat 10,这些版本默认就不会去扫描不存在的tools.jar,而且对JDK11的支持更全面,后续也能避免更多类似的兼容性问题。

为什么之前的jarsToSkip=*.jar没生效?

Tomcat的jarsToSkip属性默认主要作用于WEB-INF/lib目录下的jar,而它尝试扫描的tools.jar是在系统类路径(JDK的lib目录)里,所以全局设置*.jar并没有覆盖到系统类路径的扫描逻辑,必须明确指定跳过tools.jar才行。

修改完配置后重启Tomcat,检查启动日志,应该就不会再出现那个NoSuchFileException错误了。

内容的提问来源于stack exchange,提问作者user3820339

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:38:46