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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:24:20