Sbt run无法加载外部MSSQL依赖库的问题求助
解决Slick + MSSQL驱动找不到的问题
我来帮你排查这个驱动缺失的问题,大概率是配置细节或依赖加载的小疏漏导致的,按下面的步骤逐一验证修复:
1. 先修复JDBC URL的配置语法错误
你贴的配置里,JDBC URL的拼接存在HOCON语法错误:
url = "jdbc:sqlserver://"${database.db.host}":"${database.db.port}";databaseName="${database.db.databaseName}
这个写法会导致字符串解析异常,正确的格式应该是把所有变量嵌入到同一引号内:
url = "jdbc:sqlserver://${database.db.host}:${database.db.port};databaseName=${database.db.databaseName}"
或者直接写死完整URL做测试:
url = "jdbc:sqlserver://<IP>:<port>;databaseName=<dbname>"
URL格式错误是驱动无法识别的常见诱因。
2. 显式指定JDBC驱动类
在database.db配置块里加上驱动类的明确配置,让Slick无需自动推断:
database = { profile = "slick.jdbc.SQLServerProfile$" db { host = "<IP>" port = <port> databaseName = "<dbname>" url = "jdbc:sqlserver://${database.db.host}:${database.db.port};databaseName=${database.db.databaseName}" driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver" # 新增此行 user = "<user>" password = "<pass>" } }
虽然Slick理论上能通过URL推断驱动,但显式指定可以避免各种自动识别失败的场景。
3. 确认依赖已正确加载到类路径
执行sbt dependencyTree命令,检查输出中是否存在com.microsoft.sqlserver:mssql-jdbc:7.4.1.jre8这一项。如果看不到:
- 检查
libraryDependencies是否写在build.sbt的根级别(而非某个子项目的配置块里) - 执行
sbt clean update强制刷新依赖,清除本地缓存后重新拉取
4. 验证配置加载逻辑
给你的DatabaseUtils加个调试输出,确认配置是否正确读取:
object DatabaseUtils { private val cfg: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig("database") // 新增调试打印,确认驱动类和URL println(s"Loaded driver class: ${cfg.db.config.getString("driver")}") println(s"JDBC URL: ${cfg.db.config.getString("url")}") def db: JdbcProfile#Backend#Database = cfg.db }
运行时查看控制台输出,确认驱动类和URL是否符合预期,这能快速定位是配置加载问题还是依赖问题。
5. 检查JDK版本兼容性
你用的mssql-jdbc:7.4.1.jre8是针对JDK 8编译的,确保项目运行环境是JDK 8。如果用了JDK 11+,建议升级JDBC驱动版本(比如JDK 11对应mssql-jdbc:9.4.1.jre11)。
内容的提问来源于stack exchange,提问作者Coxer
相关产品推荐
相关产品推荐

