如何修复Liferay中java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver异常
搞定
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver 错误 我来帮你解决这个驱动类找不到的问题~ 这个错误本质是JVM在运行时找不到MySQL Connector/J的驱动类,虽然你已经加了Maven依赖,但大概率是依赖没正确部署到运行环境,或者存在类路径冲突。结合你提供的代码、配置和堆栈信息,给你几个针对性的解决方案:
1. 确认Maven驱动依赖是否被正确打包到应用中
你用的是MySQL Connector/J 8.0.15,这个版本的驱动类com.mysql.cj.jdbc.Driver是完全正确的(MySQL 8.x不再使用旧的com.mysql.jdbc.Driver),但得确保这个jar包真的跟着你的应用一起部署了:
- 如果你打包成WAR文件,解压后检查
WEB-INF/lib目录里有没有mysql-connector-java-8.0.15.jar; - 打开终端执行
mvn dependency:tree,看看依赖树里确实包含这个驱动,没有被其他依赖排除掉; - 你的依赖配置没指定
scope,默认是compile,这没问题,但如果是在Liferay环境里,可能需要调整依赖的部署方式(比如通过Liferay的模块依赖管理来引入驱动)。
2. 检查Liferay服务器的类路径冲突
从堆栈信息能看到你是在Liferay环境运行,这里要注意一个常见坑:
- 如果Liferay服务器的全局
lib目录里有旧版本的MySQL驱动,可能会和你应用内的驱动冲突,导致JVM加载错误的类或者找不到目标类; - 要么把服务器全局的旧驱动移除(如果允许的话),要么确保你应用内的驱动jar包优先级更高。
3. 清理缓存并重新构建项目
有时候Maven或IDE的缓存会搞事情,导致依赖没正确更新:
- 先执行
mvn clean install清理旧的构建文件,重新打包; - 如果用IDE开发(比如IDEA、Eclipse),同步Maven依赖后重启IDE,确保驱动jar被正确导入到项目里。
额外的小优化(不是必做,但更规范)
虽然这不是导致当前错误的原因,但你的Hibernate配置有个可以优化的地方:
你配置的hibernate.dialect是org.hibernate.dialect.MySQL5Dialect,但搭配MySQL 8.x驱动的话,更推荐用org.hibernate.dialect.MySQL8Dialect,这样能更好地支持MySQL 8.x的新特性~
内容的提问来源于stack exchange,提问作者Fryway
相关产品推荐
相关产品推荐

