You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动