Eclipse添加JDBC驱动至构建路径仍报ClassNotFoundException,放入Tomcat Lib正常求配置
解决Servlet连接MySQL时ClassNotFoundException的问题
嘿,这个问题我之前踩过一模一样的坑,核心原因其实是Web应用类加载器的作用范围搞的鬼,咱们一步步理清楚:
为什么只添加到Eclipse构建路径没用?
Eclipse的构建路径只是帮你在编译代码时找到JDBC驱动的类,但Servlet是运行在Tomcat的Web应用类加载器之下的——这个类加载器只会认Web项目WEB-INF/lib目录下的JAR,以及Tomcat自身lib目录里的类,完全不会理会你在Eclipse项目里单独配置的构建路径依赖。所以编译时一切正常,运行起来就找不到驱动类了。
正确的解决方法(两种推荐方式)
方式1:通过Eclipse的Deployment Assembly配置(开发阶段友好)
这是最省心的开发时配置,让Eclipse自动帮你把驱动部署到正确位置:
- 右键你的Web项目 → 选择
Properties - 在左侧菜单找到
Deployment Assembly - 点击
Add→ 选择Java Build Path Entries→ 下一步 - 选中你之前添加到构建路径的MySQL驱动JAR → 点击
Finish - 保存配置后,下次启动Tomcat时,Eclipse会自动把驱动JAR复制到项目的
WEB-INF/lib目录下,Tomcat就能正确加载了
方式2:直接把驱动放到项目的WEB-INF/lib目录(生产环境标准)
这是更规范的做法,和生产环境的部署逻辑完全一致:
- 找到你的MySQL驱动JAR文件,直接复制到Web项目的
WEB-INF/lib文件夹里 - Eclipse会自动识别这个JAR并添加到构建路径,编译和运行都不会有问题
- 打包WAR包时,驱动会跟着一起打包,部署到任何Tomcat环境都不需要额外手动添加驱动,项目独立性更强
为什么放到Tomcat lib能行?(不推荐长期这么用)
Tomcat的lib目录是由它的共享类加载器负责加载的,所有部署在这个Tomcat上的Web应用都能共享这里的类。但这种做法有两个明显的问题:
- 如果多个Web应用依赖不同版本的MySQL驱动,会出现类版本冲突
- 你的项目WAR包本身不包含驱动,部署到其他Tomcat环境时还得手动复制驱动到
lib,移植性很差
额外注意点
- 确保驱动版本和MySQL服务器匹配:你用的是MySQL 8.0.21,一定要用
mysql-connector-java-8.0.x版本的驱动,别用5.x的旧驱动 - 加载驱动的代码要正确:MySQL 8.0的驱动类名是
com.mysql.cj.jdbc.Driver,不是旧的com.mysql.jdbc.Driver,如果代码里写的是旧类名,也可能触发异常(不过你放到Tomcat lib能运行,这个大概率没问题,但还是建议检查下)
内容的提问来源于stack exchange,提问作者Nagen
相关产品推荐
相关产品推荐

