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

使用ScalikejdbcGen反向MySQL Schema时遭遇ClassNotFoundException

解决ScalikeJDBCGen执行时的com.mysql.jdbc.Driver找不到问题

我来帮你排查这个问题——你遇到的ClassNotFoundException本质上是ScalikejdbcPlugin作为sbt插件运行时,无法访问到项目依赖里的MySQL驱动,因为sbt插件的classpath和项目自身的classpath是完全独立的。结合你的配置和错误信息,给你几个针对性的解决方案:

1. 把MySQL驱动添加到sbt插件的依赖中

ScalikejdbcGen是通过sbt插件执行的,它的依赖不会自动继承项目的libraryDependencies。你需要在project/plugins.sbt文件中明确添加MySQL驱动的依赖:

// project/plugins.sbt中添加
addSbtPlugin("org.scalikejdbc" %% "scalikejdbc-mapper-generator" % "3.5.0")
// 新增MySQL驱动依赖,和你项目中用的版本保持一致或者升级到兼容版本
libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.33"

2. 升级MySQL驱动版本并修正驱动类名

你当前使用的mysql-connector-java:5.1.12是非常老旧的版本,如果你用的是JDK 11+,这个版本会有兼容性问题。而且MySQL 8.0+的驱动类已经从com.mysql.jdbc.Driver改成了com.mysql.cj.jdbc.Driver。建议你升级驱动版本:

修改build.sbt中的MySQL依赖:

// 替换旧的驱动依赖
"mysql" % "mysql-connector-java" % "8.0.33",

同时,确保你的数据库配置文件(比如application.conf)中的驱动类名也同步更新:

db.default.driver="com.mysql.cj.jdbc.Driver"
db.default.url="jdbc:mysql://localhost:3306/your_db_name?serverTimezone=UTC&useSSL=false"

3. 清理sbt缓存并重新加载项目

有时候sbt的缓存会导致依赖加载异常,执行以下命令清理缓存并重新加载项目:

sbt clean reload

如果还是不行,可以手动删除本地sbt缓存目录(比如~/.ivy2/cache/mysql或者~/.cache/coursier/v1/https/repo1.maven.org/maven2/mysql),然后重新运行ScalikeJDBCGen命令。

4. 确认ScalikeJDBC插件配置的正确性

确保你的databaseMysql项目的ScalikeJDBC配置指向了正确的数据库,比如在application.conf中明确指定对应的数据库配置:

db.product.driver="com.mysql.cj.jdbc.Driver"
db.product.url="jdbc:mysql://localhost:3306/product_db?serverTimezone=UTC"
db.product.user="your_username"
db.product.password="your_password"

做完这些修改后,再重新执行你的生成命令:

sbt "databaseMysql/compile scalikejdbcGen product Product"

内容的提问来源于stack exchange,提问作者Pratik K. Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:42:45