探索 mysql 依賴為 Runtime 的原因
MySQL 的 maven 依賴被聲明為 Runtime,這引發(fā)了一個疑問:既然打包時不包含 MySQL 依賴,發(fā)布后的項目如何連接數(shù)據(jù)庫?
理解這個問題的關(guān)鍵在于 JDBC(Java 數(shù)據(jù)庫連接)的工作原理。在編碼時,我們只依賴 JDBC 接口,而不是 MySQL 特定的驅(qū)動程序。在連接 MySQL 時,我們使用反射方法 class.forName 在運行時從 ClassPath 加載 MySQL JDBC 驅(qū)動程序。
隨后的調(diào)用中,我們使用的是 JDBC 接口而不是 MySQL 專有方法,這意味著我們沒有在編譯時直接依賴 MySQL JDBC 驅(qū)動程序。因此,JDBC 驅(qū)動程序?qū)儆谶\行時依賴(Runtime Scope)。
Runtime 依賴在編譯時不會引入 ClassPath,但會在打包時引入,因此無需擔(dān)心 JDBC 驅(qū)動程序的缺失。
總結(jié)一下,MySQL 依賴聲明為 Runtime 的原因是:
- 編碼時僅依賴 JDBC 接口,而不是 MySQL 驅(qū)動程序。
- JDBC 驅(qū)動程序在運行時從 ClassPath 加載,用于連接數(shù)據(jù)庫。
- 編譯時依賴 Compile Scope,通常同時是運行時依賴。
- 某些依賴可能為 CompileOnly Scope,在編譯時需要,但運行時不需要(例如注解處理器)。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END