为什么mysql的依赖scope是runtime？
如题，runtime意味着打包时不包含mysql依赖，没有mysql驱动发布后的项目如何正常连接数据库呢？
因为JDBC通常你在编码的时候依赖的只是JDBC接口，而不直接依赖mysql JDBC对吧？
想想你在连接mysql的时候是不是用的类似于这样的代码?
```
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(url, username, password);
// ...
```
我们会发现我们会使用反射方法`Class.forName`在运行的时候从ClassPath中加载Mysql JDBC,后续调用的时候均没有使用任何MySQL JDBC的专有方法，而是用的JDBC接口，对吧？
所以JDBC Driver不是编译依赖(Compile Scope)，因为我们的代码中没有直接使用JDBC Driver的专有方法，所以编译的时候不需要JDBC Driver存在。JDBC接口才是编译依赖，JDBC Driver属于运行依赖(Runtime Scope)。
你声明Runtime依赖的时候在编译中是不会将依赖引入ClassPath的，但是打包的时候会，所以无需担心，JDBC Driver就应该是Runtime Scope依赖。
Compile Scope指的是编译的时候需要该依赖，通常编译依赖也是Runtime依赖，而Maven/Gradle对于compile依赖通常都是编译之后同时也包含在fat jar中的，相当于Compile就隐含Runtime。某些依赖也可能是CompileOnly依赖，比如注解处理器就是典型的CompileOnly依赖，只有编译的时候需要，编译过后在运行中是不需要的