
探索 MySQL 依赖为 Runtime 的原因
MySQL 的 Maven 依赖被声明为 Runtime,这引发了一个疑问:既然打包时不包含 MySQL 依赖,发布后的项目如何连接数据库?
理解这个问题的关键在于 JDBC(Java 数据库连接)的工作原理。在编码时,我们只依赖 JDBC 接口,而不是 MySQL 特定的驱动程序。在连接 MySQL 时,我们使用反射方法 Class.forName 在运行时从 ClassPath 加载 MySQL JDBC 驱动程序。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
随后的调用中,我们使用的是 JDBC 接口而不是 MySQL 专有方法,这意味着我们没有在编译时直接依赖 MySQL JDBC 驱动程序。因此,JDBC 驱动程序属于运行时依赖(Runtime Scope)。
Runtime 依赖在编译时不会引入 ClassPath,但会在打包时引入,因此无需担心 JDBC 驱动程序的缺失。
总结一下,MySQL 依赖声明为 Runtime 的原因是:
- 编码时仅依赖 JDBC 接口,而不是 MySQL 驱动程序。
- JDBC 驱动程序在运行时从 ClassPath 加载,用于连接数据库。
- 编译时依赖 Compile Scope,通常同时是运行时依赖。
- 某些依赖可能为 CompileOnly Scope,在编译时需要,但运行时不需要(例如注解处理器)。

















