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

另外,還有一個(gè)問題就是,我發(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)目測試一下是否配置成功。如果沒有成功可以清理一下緩存或重啟idea。)
點(diǎn)擊頂部菜單 File > Invalidate Caches / Restart(或使用快捷鍵 Ctrl + Shift + A 搜索 Invalidate Caches)

- ??常規(guī)緩存清理??:勾選 ??Invalidate and Restart??(默認(rèn)不勾選其他選項(xiàng)),適合解決 IDE 卡頓、索引緩慢等問題。
- ??本地歷史問題??:若需清除本地修改記錄(謹(jǐn)慎操作),勾選第 1 項(xiàng)。
- ??VCS 操作緩慢??:勾選第 2 項(xiàng),重建 VCS 索引(可能耗時(shí)較久)。
- ??共享索引異常??:勾選第 3 項(xiàng),強(qiáng)制更新共享索引(需聯(lián)網(wǎng))。
- ??網(wǎng)頁內(nèi)容異常??:勾選第 4 項(xiàng),修復(fù)內(nèi)置瀏覽器顯示問題。
到此這篇關(guān)于深度解析JDK和Maven究竟是什么,兩者之間有什么聯(lián)系的文章就介紹到這了,更多相關(guān)jdk maven聯(lián)系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis?Mapper.XML?標(biāo)簽使用小結(jié)
在MyBatis中,通過resultMap可以解決字段名和屬性名不一致的問題,對(duì)于復(fù)雜的查詢,引用實(shí)體或使用<sql>標(biāo)簽可以定義復(fù)用的SQL片段,提高代碼的可讀性和編碼效率,使用這些高級(jí)映射和動(dòng)態(tài)SQL技巧,可以有效地處理復(fù)雜的數(shù)據(jù)庫交互場景2024-10-10
Mybatis-Plus中update()和updateById()將字段更新為null
本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Spring項(xiàng)目接入DeepSeek的兩種超簡單的方式分享
DeepSeek?作為一款卓越的國產(chǎn)?AI?模型,越來越多的公司考慮在自己的應(yīng)用中集成,本文為大家?分享了Spring項(xiàng)目接入DeepSeek的兩種超簡單的方式,希望對(duì)大家有所幫助2025-02-02
詳解IDEA使用Maven項(xiàng)目不能加入本地Jar包的解決方法
這篇文章主要介紹了詳解IDEA使用Maven項(xiàng)目不能加入本地Jar包的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
java中將科學(xué)計(jì)數(shù)法轉(zhuǎn)換普通計(jì)數(shù)法的簡單方法
下面小編就為大家?guī)硪黄猨ava中將科學(xué)計(jì)數(shù)法轉(zhuǎn)換普通計(jì)數(shù)法的簡單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
SpringBoot2.x使用POI實(shí)現(xiàn)導(dǎo)入數(shù)據(jù)到Excel
這篇文章主要為大家詳細(xì)介紹了SpringBoot2.x如何使用POI實(shí)現(xiàn)導(dǎo)入數(shù)據(jù)到Excel,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-07-07
Java下SpringBoot創(chuàng)建定時(shí)任務(wù)詳解
這篇文章主要介紹了Java下SpringBoot創(chuàng)建定時(shí)任務(wù)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

