Ubuntu 16.04下MySQL JDBC驱动安装失败及sbt run警告求助
别慌,我来帮你把问题拆解清楚,一步步解决:
问题拆解与解决方案
1. 为什么java -jar mysql-connector-java-5.1.45-bin.jar会报错?
首先得纠正一个误解:MySQL JDBC驱动jar不是可执行程序,它只是供Java/Scala程序调用的类库,本身没有包含可运行的主类(也就是没有MANIFEST.MF里的Main-Class属性),所以用java -jar执行它肯定会报no main manifest attribute——这完全是正常的,你根本不需要执行这个jar包!
2. Scala连接MySQL的正确姿势
方式一:通过sbt添加依赖(推荐)
这是最省心的方式,sbt会自动帮你下载并管理驱动jar。在项目根目录的build.sbt文件里添加以下依赖:
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.45"
保存后重新运行sbt run,sbt会自动处理依赖,不需要你手动折腾本地的jar包。
方式二:手动导入已下载的jar包
如果你坚持用自己下载的jar,只需要把它放到项目根目录的lib文件夹下(如果没有就新建一个),sbt会自动识别这个目录下的jar作为项目依赖,不用额外配置。
3. 关于sbt run的警告处理
你没给出具体警告内容,但我整理了几种常见情况和解决办法:
- 依赖冲突警告:如果提示某个类存在多个版本,你可以运行
sbt dependencyTree查看完整的依赖树,找到冲突的依赖后用exclude排除。比如:libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.45" exclude ("some.group.id", "conflicting-artifact-name") - 过时API警告:MySQL 5.1.x驱动版本可能和你当前用的Scala/Java版本存在API过时的情况,要么升级驱动到8.0.x系列(注意8.0版本的groupId是
com.mysql.cj),要么在build.sbt里添加参数调整警告级别:// 显示详细警告信息,方便排查 scalacOptions ++= Seq("-deprecation", "-unchecked") // 或者关闭过时API警告 scalacOptions ++= Seq("-Xlint:-deprecation") - 类路径重复警告:检查你的
lib目录下有没有重复的驱动jar,或者build.sbt里是否重复定义了MySQL依赖,删掉多余的即可。
测试连接的示例代码
给你一个简单的Scala测试代码,用来验证连接是否正常:
import java.sql.DriverManager object MySQLConnectionTest { def main(args: Array[String]): Unit = { // 替换成你的数据库配置 val dbUrl = "jdbc:mysql://localhost:3306/your_db_name?useSSL=false&serverTimezone=UTC" val dbUser = "your_username" val dbPassword = "your_password" // JDBC 4.0+和Scala 2.12+可以省略这行,驱动会自动加载 Class.forName("com.mysql.jdbc.Driver") val connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword) println("✅ 数据库连接成功!") connection.close() } }
注意:如果你的MySQL是8.0及以上版本,驱动类名要改成com.mysql.cj.jdbc.Driver,同时url里的serverTimezone参数不能少。
内容的提问来源于stack exchange,提问作者A. N. Other




