深度解析JDK和Maven究竟是什么,兩者之間有什么聯(lián)系
本文主要是為了講清楚JDK和Maven究竟是什么,兩者之間有什么聯(lián)系?
JDK(Java Development Kit)和Maven是Java開(kāi)發(fā)中兩個(gè)核心工具,但它們的定位和功能完全不同。我將從兩者各自的作用,聯(lián)系和常見(jiàn)誤解三個(gè)維度來(lái)進(jìn)行詳細(xì)說(shuō)明。
一、JDK 是什么?
JDK 是 ??Java 開(kāi)發(fā)工具包(Java Development Kit)??,是 Java 生態(tài)中最基礎(chǔ)的工具集,??所有 Java 程序的開(kāi)發(fā)、編譯、運(yùn)行都依賴(lài) JDK??。它包含以下核心組件:
| 組件 | 作用 |
|---|---|
| ??JRE(Java Runtime Environment)?? | Java 運(yùn)行時(shí)環(huán)境,包含 JVM(Java 虛擬機(jī))和核心類(lèi)庫(kù)(如 java.lang),負(fù)責(zé)執(zhí)行編譯后的字節(jié)碼(.class 文件)。 |
| ??javac 編譯器?? | 將 Java 源代碼(.java 文件)編譯為字節(jié)碼(.class 文件)。 |
| ??jdb 調(diào)試工具?? | 用于調(diào)試 Java 程序。 |
| ??jconsole/jvisualvm?? | 監(jiān)控 JVM 運(yùn)行狀態(tài)的工具(如內(nèi)存、線程)。 |
| ??其他工具?? | 如 jar(打包工具)、jps(查看進(jìn)程)等。 |
??關(guān)鍵結(jié)論??:沒(méi)有 JDK,就無(wú)法編寫(xiě)、編譯或運(yùn)行任何 Java 程序(即使是簡(jiǎn)單的 HelloWorld)。
二、Maven 是什么?
Maven 是 ??Java 項(xiàng)目的構(gòu)建與依賴(lài)管理工具??(也可用于其他語(yǔ)言,但主要服務(wù)于 Java),核心解決兩大問(wèn)題:
1. ??依賴(lài)管理??
傳統(tǒng) Java 項(xiàng)目需要手動(dòng)下載第三方庫(kù)(如 Spring、MyBatis),并處理版本沖突、依賴(lài)傳遞(A 依賴(lài) B,B 依賴(lài) C,自動(dòng)傳遞 C)等問(wèn)題。Maven 通過(guò) ??pom.xml(項(xiàng)目對(duì)象模型)?? 聲明依賴(lài),自動(dòng)從 ??遠(yuǎn)程倉(cāng)庫(kù)(如 Maven 中央倉(cāng)庫(kù))?? 下載所需庫(kù),并存儲(chǔ)到 ??本地倉(cāng)庫(kù)??(本地緩存),避免重復(fù)下載。
2. ??項(xiàng)目構(gòu)建??
提供標(biāo)準(zhǔn)化的 ??生命周期(Lifecycle)??,自動(dòng)化完成編譯、測(cè)試、打包(如生成 JAR/WAR)、部署等流程。例如執(zhí)行 mvn clean package 會(huì)自動(dòng):
- 清理舊編譯文件(
clean)→ 編譯源代碼(compile)→ 運(yùn)行單元測(cè)試(test)→ 打包為JAR(package)。
??關(guān)鍵結(jié)論??:Maven 不負(fù)責(zé) Java 程序的編譯或運(yùn)行(這由 JDK 完成),而是簡(jiǎn)化項(xiàng)目管理和依賴(lài)處理。
三、JDK 和 Maven 的聯(lián)系
兩者在 Java 開(kāi)發(fā)中??協(xié)作但分工明確??,共同支撐項(xiàng)目的完整生命周期:
1. 依賴(lài)編譯需要 JDK
當(dāng) Maven 下載完項(xiàng)目依賴(lài)(如 spring-core-5.3.0.jar)后,執(zhí)行 mvn compile 時(shí),Maven 會(huì)調(diào)用 JDK 中的 javac 編譯器,將項(xiàng)目的 .java 源文件編譯為 .class 字節(jié)碼。??沒(méi)有 JDK,Maven 無(wú)法完成編譯步驟??。
2. 依賴(lài)運(yùn)行需要 JDK
項(xiàng)目打包后的 .jar 文件(字節(jié)碼)最終需要運(yùn)行在 JVM 上(JDK 的一部分)。例如通過(guò) java -jar app.jar 啟動(dòng)程序時(shí),本質(zhì)是 JVM(JDK 提供)加載并執(zhí)行字節(jié)碼。??沒(méi)有 JDK,編譯后的代碼無(wú)法運(yùn)行??。
3. 版本兼容性要求
Maven 本身不限制 JDK 版本,但項(xiàng)目中聲明的依賴(lài)(如 Spring Boot 3.0+ 要求 JDK 17+)需要與本地安裝的 JDK 版本匹配。例如:
- 若項(xiàng)目依賴(lài)
Java 11的特性(如var關(guān)鍵字),但本地 JDK 是8,則編譯會(huì)報(bào)錯(cuò)。 - 因此,JDK 版本需滿足項(xiàng)目依賴(lài)的最低要求(由
pom.xml或文檔指定)。
四、常見(jiàn)誤解澄清
誤解 1:“Maven 是本地依賴(lài)倉(cāng)庫(kù)”
??錯(cuò)誤??。Maven 的 ??本地倉(cāng)庫(kù)?? 是它管理的一個(gè)目錄(默認(rèn)在 ~/.m2/repository),用于緩存從遠(yuǎn)程倉(cāng)庫(kù)下載的依賴(lài)。Maven 本身是工具,本地倉(cāng)庫(kù)是它的“緩存區(qū)”。
誤解 2:“有了 Maven 就不需要 JDK”
??錯(cuò)誤??。Maven 只是管理依賴(lài)和構(gòu)建流程,Java 程序的編譯和運(yùn)行必須依賴(lài) JDK(尤其是 javac 和 JVM)。
誤解 3:“JDK 包含 Maven”
??錯(cuò)誤??。JDK 是 Java 開(kāi)發(fā)工具包,Maven 是獨(dú)立的項(xiàng)目管理工具(需單獨(dú)安裝),兩者無(wú)包含關(guān)系。
總結(jié)
- ??JDK??:Java 開(kāi)發(fā)的“地基”,負(fù)責(zé)源代碼編譯、字節(jié)碼運(yùn)行。
- ??Maven??:Java 項(xiàng)目的“管家”,負(fù)責(zé)依賴(lài)管理和構(gòu)建流程自動(dòng)化。
- ??聯(lián)系??:Maven 依賴(lài) JDK 完成編譯和運(yùn)行,JDK 為 Maven 處理的代碼提供運(yùn)行環(huán)境,二者共同支撐 Java 項(xiàng)目的全生命周期。
最后順便提一下如何更新Maven倉(cāng)庫(kù)的鏡像地址,提高依賴(lài)的下載速度?
在國(guó)內(nèi)使用 Maven 時(shí),由于默認(rèn)的中央倉(cāng)庫(kù)(https://repo.maven.apache.org/maven2)服務(wù)器位于國(guó)外,下載依賴(lài)速度較慢甚至超時(shí)。通過(guò)更換為??國(guó)內(nèi)鏡像倉(cāng)庫(kù)??(如阿里云、華為云、清華大學(xué)鏡像站等),可以顯著提升依賴(lài)下載速度。以下是詳細(xì)的操作步驟和常用鏡像源推薦:
Maven 的鏡像配置通過(guò) settings.xml 文件完成,該文件有兩種位置:
- ??全局配置??:Maven 安裝目錄下的
conf/settings.xml(所有項(xiàng)目共享)。 - ??項(xiàng)目級(jí)配置??:項(xiàng)目根目錄下的
pom.xml或.mvn/maven.config(僅當(dāng)前項(xiàng)目生效,優(yōu)先級(jí)高于全局)。
??推薦修改全局配置??,避免每個(gè)項(xiàng)目重復(fù)設(shè)置。
??二、更換鏡像的具體步驟??
1. 找到settings.xml文件
- 全局路徑示例(Windows):
C:\Program Files\apache-maven-3.8.6\conf\settings.xml - 全局路徑示例(macOS/Linux):
/usr/local/apache-maven-3.8.6/conf/settings.xml
2. 編輯<mirrors>標(biāo)簽添加鏡像配置
在 settings.xml 中找到 <mirrors> 節(jié)點(diǎn)(若不存在則手動(dòng)創(chuàng)建),添加鏡像規(guī)則。每個(gè)鏡像需指定以下屬性:
<id>:鏡像的唯一標(biāo)識(shí)(自定義,不可重復(fù))。<name>:鏡像的描述(可選)。<url>:鏡像倉(cāng)庫(kù)的地址(核心)。<mirrorOf>:指定該鏡像替代的原倉(cāng)庫(kù)(關(guān)鍵策略)。
??三、常用國(guó)內(nèi)鏡像源推薦??
以下是國(guó)內(nèi)常用的 Maven 鏡像源,覆蓋主流需求:
| 鏡像源名稱(chēng) | 鏡像地址 | 特點(diǎn) |
|---|---|---|
| ??阿里云鏡像?? | https://maven.aliyun.com/repository/public | 國(guó)內(nèi)最常用,覆蓋幾乎所有 Maven 中央倉(cāng)庫(kù)的依賴(lài),更新及時(shí)。 |
| ??清華大學(xué)鏡像站?? | https://mirrors.tuna.tsinghua.edu.cn/maven/ | 清華大學(xué)開(kāi)源軟件鏡像站,同步官方倉(cāng)庫(kù),穩(wěn)定性高。 |
| ??華為云鏡像?? | https://repo.huaweicloud.com/javaee/ | 華為云提供,適合對(duì)網(wǎng)絡(luò)穩(wěn)定性要求高的場(chǎng)景。 |
| ??網(wǎng)易鏡像?? | http://maven.net.cn/content/groups/public/ | 較早的國(guó)內(nèi)鏡像,部分舊依賴(lài)可能更友好。 |
??四、配置示例(以阿里云鏡像為例)??
在 settings.xml 的 <mirrors> 標(biāo)簽內(nèi)添加以下內(nèi)容(覆蓋中央倉(cāng)庫(kù)的所有請(qǐng)求):
<mirrors>
<!-- 阿里云公共倉(cāng)庫(kù)鏡像 -->
<mirror>
<id>aliyun-maven</id>
<name>Aliyun Maven Repository</name>
<url>https://maven.aliyun.com/repository/public</url>
<!-- mirrorOf="*" 表示替代所有遠(yuǎn)程倉(cāng)庫(kù)的請(qǐng)求(推薦) -->
<!-- mirrorOf="central" 表示僅替代中央倉(cāng)庫(kù)的請(qǐng)求 -->
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>關(guān)鍵參數(shù)說(shuō)明:
<mirrorOf>*</mirrorOf>:*是通配符,表示??替代所有遠(yuǎn)程倉(cāng)庫(kù)的請(qǐng)求??(包括中央倉(cāng)庫(kù)和其他第三方倉(cāng)庫(kù))。<mirrorOf>central</mirrorOf>:僅替代 Maven 中央倉(cāng)庫(kù)(central是中央倉(cāng)庫(kù)的默認(rèn) ID)的請(qǐng)求。
(如果項(xiàng)目中顯式聲明了其他第三方倉(cāng)庫(kù),如https://repo.example.com,則需要額外配置<mirrorOf>example-repo-id</mirrorOf>。)
??五、驗(yàn)證鏡像是否生效??
修改 settings.xml 后,執(zhí)行 Maven 構(gòu)建命令(如 mvn clean install),觀察控制臺(tái)輸出的下載日志:
[INFO] Downloading from aliyun-maven: https://maven.aliyun.com/repository/public/.../spring-core-5.3.0.jar
若日志中出現(xiàn)鏡像地址(如 aliyun-maven 對(duì)應(yīng)的 URL),說(shuō)明配置成功。
??六、常見(jiàn)問(wèn)題與注意事項(xiàng)??
- ??鏡像沖突??:若多個(gè)鏡像配置了相同的
<mirrorOf>,Maven 會(huì)按<mirrors>標(biāo)簽中的順序選擇第一個(gè)匹配的鏡像。建議只保留一個(gè)常用鏡像。 - ??私有倉(cāng)庫(kù)兼容??:如果項(xiàng)目使用私有倉(cāng)庫(kù)(如 Nexus),需在
<mirrors>中排除私有倉(cāng)庫(kù)的 ID(例如<mirrorOf>*,!my-private-repo</mirrorOf>),否則會(huì)被鏡像覆蓋。 - ??HTTPS 與 HTTP??:國(guó)內(nèi)鏡像通常支持 HTTPS,推薦使用 HTTPS 地址(避免網(wǎng)絡(luò)攔截)。
- ??緩存更新??:Maven 本地倉(cāng)庫(kù)(默認(rèn)
~/.m2/repository)可能緩存了舊版本的依賴(lài),若鏡像源中依賴(lài)版本更新,需手動(dòng)刪除本地舊文件后重新下載。
??總結(jié)??
通過(guò)修改 Maven 的 settings.xml 配置文件,添加國(guó)內(nèi)鏡像源(如阿里云),可以快速解決依賴(lài)下載慢的問(wèn)題。核心是在 <mirrors> 標(biāo)簽中指定鏡像地址和覆蓋策略(mirrorOf),并驗(yàn)證配置是否生效。
最關(guān)鍵的是在idea中修改默認(rèn)的配置文件和倉(cāng)庫(kù)地址。(默認(rèn)會(huì)下載在C盤(pán),時(shí)間久了占用太多空間。)
注:上面的Maven home_path是Maven的安裝路徑,User settings_file是自定義的settings.xml文件(全局生效) Local repository是本地倉(cāng)庫(kù)路徑(所有依賴(lài)的的存儲(chǔ)位置)

另外,還有一個(gè)問(wèn)題就是,我發(fā)現(xiàn)每次導(dǎo)入別人的項(xiàng)目,都需要手動(dòng)進(jìn)行修改,但是為了更加方便,同樣也是有方法解決的。(有時(shí)忘記修改配置,也是很頭疼)
1.進(jìn)入Flie->New Projects Setup -> Settings for New Projects(Windows/Linux)
- Mac用戶是 IntelliJ IDEA → Preferences → Build, Execution, Deployment → Build Tools → Maven
然后就可以對(duì)默認(rèn)的Maven配置進(jìn)行修改了。(修改完以后可以新建一個(gè)新項(xiàng)目測(cè)試一下是否配置成功。如果沒(méi)有成功可以清理一下緩存或重啟idea。)
點(diǎn)擊頂部菜單 File > Invalidate Caches / Restart(或使用快捷鍵 Ctrl + Shift + A 搜索 Invalidate Caches)

- ??常規(guī)緩存清理??:勾選 ??Invalidate and Restart??(默認(rèn)不勾選其他選項(xiàng)),適合解決 IDE 卡頓、索引緩慢等問(wèn)題。
- ??本地歷史問(wèn)題??:若需清除本地修改記錄(謹(jǐn)慎操作),勾選第 1 項(xiàng)。
- ??VCS 操作緩慢??:勾選第 2 項(xiàng),重建 VCS 索引(可能耗時(shí)較久)。
- ??共享索引異常??:勾選第 3 項(xiàng),強(qiáng)制更新共享索引(需聯(lián)網(wǎng))。
- ??網(wǎng)頁(yè)內(nèi)容異常??:勾選第 4 項(xiàng),修復(fù)內(nèi)置瀏覽器顯示問(wèn)題。
到此這篇關(guān)于深度解析JDK和Maven究竟是什么,兩者之間有什么聯(lián)系的文章就介紹到這了,更多相關(guān)jdk maven聯(lián)系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA連接mysql數(shù)據(jù)庫(kù)報(bào)錯(cuò)的解決方法
這篇文章主要介紹了IDEA連接mysql數(shù)據(jù)庫(kù)報(bào)錯(cuò)的解決方法,文中有非常詳細(xì)的圖文示例,對(duì)出現(xiàn)Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ prope報(bào)錯(cuò)的小伙伴們很有幫助喲,需要的朋友可以參考下2021-05-05
Java利用endorsed如何覆蓋jdk提供的類(lèi)詳解
這篇文章主要給大家介紹了關(guān)于Java利用endorsed如何覆蓋jdk提供的類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
Java使用EasyExcel動(dòng)態(tài)添加自增序號(hào)列
本文將介紹如何通過(guò)使用EasyExcel自定義攔截器實(shí)現(xiàn)在最終的Excel文件中新增一列自增的序號(hào)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
使用Spring Boot輕松實(shí)現(xiàn)流式AI輸出的步驟
本文介紹了如何使用Spring Boot和WebFlux實(shí)現(xiàn)流式AI輸出,通過(guò)非阻塞I/O、反應(yīng)式編程和函數(shù)式路由等技術(shù),優(yōu)化了AI應(yīng)用的響應(yīng)速度,提升了用戶體驗(yàn),感興趣的朋友一起看看吧2025-02-02
Java?Web?Axios實(shí)現(xiàn)前后端數(shù)據(jù)異步交互實(shí)例代碼
Axios作為一個(gè)流行的前端?HTTP?通信庫(kù),可以極大地簡(jiǎn)化前端與后端之間的數(shù)據(jù)交互,這篇文章主要介紹了Java?Web?Axios實(shí)現(xiàn)前后端數(shù)據(jù)異步交互的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
Maven修改運(yùn)行環(huán)境配置代碼實(shí)例
這篇文章主要介紹了Maven修改運(yùn)行環(huán)境配置代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java實(shí)現(xiàn)自定義table寬高的示例代碼
在桌面應(yīng)用、管理系統(tǒng)乃至報(bào)表工具中,表格(JTable)作為最常用的數(shù)據(jù)展示組件,不僅承載對(duì)數(shù)據(jù)的增刪改查,還需要配合布局與視覺(jué)需求,而 Java Swing 的 JTable 默認(rèn)行高和列寬均采用系統(tǒng)或 L&F 的默認(rèn)值,所以本文給大家介紹了Java實(shí)現(xiàn)自定義table寬高2025-06-06

