Eclipse启动Tomcat时报错java.lang.NoClassDefFoundError: java/sql/Driver
问题根因
- 你使用的Java 11为模块化JDK,
java.sql.Driver类归属于JDK内置的java.sql模块,该模块默认不在引导类加载器(Bootstrap ClassLoader)的加载范围内 - 启动日志中显示的
-Xbootclasspath参数将mysql-connector-java 8.0.26交由引导类加载器加载,驱动依赖的java.sql.Driver对该类加载器不可见,因此抛出NoClassDefFoundError - 你在启动配置中找不到该参数,是因为参数由Eclipse Servers组件或项目本地配置自动注入,并非手动配置的启动参数
解决方案
第一步:移除自动注入的-Xbootclasspath配置
按以下路径排查隐藏的参数配置:
- 打开Eclipse的
Servers视图,右键当前使用的Tomcat实例,选择Open - 点击页面中的
Open launch configuration选项,切换到Environment标签页,删除所有包含Xbootclasspath的环境变量配置 - 进入项目根目录的
.settings文件夹,打开org.eclipse.wst.server.core.prefs文件,删除所有包含Xbootclasspath的配置行,重启Eclipse后重试
第二步:调整mysql驱动的加载范围
mysql-connector-java 8.x版本无需放入引导类路径,按规则配置即可:
- 若数据源配置在Tomcat的
context.xml中,仅保留Tomcatlib目录下的mysql-connector-java-8.0.26.jar,删除项目WEB-INF/lib目录下的同版本驱动包,避免类冲突 - 若使用Maven管理依赖,将驱动的
scope设置为provided,示例配置如下:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> <scope>provided</scope> </dependency>
第三步:添加模块暴露配置(可选)
如果完成前两步后仍报错,在Tomcat启动的VM参数中添加模块化配置:
打开Run Configurations->Arguments标签,在VM arguments输入框中添加以下参数:--add-modules java.sql
保存配置后重启Tomcat即可。
内容的提问来源于stack exchange,提问作者lordbah
相关产品推荐
相关产品推荐

