Maven:依賴管理就像樂高拼裝的藝術

目錄

    • 🏗? 第一章:Maven是高級樂高玩家
      • 🔍 依賴管理的基本單元
    • 🧩 第二章:多模塊項目——樂高巨艦組裝術
      • 🌟 為什么要拆分模塊?
      • 🛠? 父子POM配置示范
    • ?? 第三章:依賴沖突——樂高零件不兼容事件
      • 🔥 經典沖突場景
      • 🛡? 三大解決武器
        • 武器1:依賴排除(精準拆除)
        • 武器2:依賴鎖定(版本固化)
        • 武器3:mvn命令分析(偵探工具)
    • 🏭 第四章:私服搭建——企業級樂高倉庫
      • 🤔 為什么需要私服?
      • 🚧 Nexus私服踩坑記錄
        • 坑1:默認admin密碼在哪?
        • 坑2:上傳jar返回400錯誤
        • 坑3:代理中央倉庫慢
      • 🌟 最佳實踐配置
    • 🧰 第五章:Maven高級工具包
      • 🛠? 常用插件推薦
      • 💡 冷知識:依賴范圍(scope)詳解
    • 🌟 終極心法

🏗? 第一章:Maven是高級樂高玩家

🔍 依賴管理的基本單元

<!-- 每個依賴就是一個樂高零件 -->
<dependency><groupId>com.lego</groupId>    <!-- 零件系列 --><artifactId>engine</artifactId> <!-- 具體零件 --><version>2.0</version>         <!-- 零件版本 --><scope>runtime</scope>         <!-- 使用場景 -->
</dependency>

樂高 vs Maven 類比表:

樂高術語Maven對應概念作用
零件包Dependency功能模塊
拼裝說明書POM.xml構建指南
零件分類箱Local Repository本地倉庫
樂高官網Maven Central中央倉庫
定制零件商店Nexus/Artifactory私服

💡 小劇場:

當你在pom里加依賴時,Maven就像個樂高管家:

"主人要的’發動機2.0’,我從中央倉庫(樂高官網)給您下載~

如果缺零件,我還會去您配置的私服(定制商店)找找!"

🧩 第二章:多模塊項目——樂高巨艦組裝術

🌟 為什么要拆分模塊?

  • 問題場景:單模塊項目變成"一鍋亂燉"
monolith-project/
├── src/
│   ├── main/
│   │   ├── java/  # 所有代碼混在一起
│   │   └── resources/
└── pom.xml        # 依賴列表長達200行!
  • 解決方案:按功能拆分成"樂高模塊"
modular-project/
├── api/           # 接口定義
├── core/          # 核心邏輯
├── web/           # 控制器
└── pom.xml        # 父POM管理公共配置

🛠? 父子POM配置示范

父pom.xml(相當于樂高底板):

<modules>
<module>api</module>
<module>core</module>
<module>web</module>
</modules><!-- 統一管理依賴版本 -->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.0</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

子模塊pom.xml(特定零件包):

<!-- 繼承父POM -->
<parent><groupId>com.mycompany</groupId><artifactId>parent</artifactId><version>1.0</version>
</parent><!-- 聲明自己的依賴 -->
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 無需寫版本,父POM已管理 --></dependency>
</dependencies>

拆分技巧:

  • 按職責劃分:比如order-service, user-service
  • 按架構分層:比如model, repository, service
  • 黃金法則:一個模塊的變更不應頻繁影響其他模塊

?? 第三章:依賴沖突——樂高零件不兼容事件

🔥 經典沖突場景

[WARNING] Found conflict:
com.google.guava:guava:jar:
20.0 (compile) vs 30.0-jre (compile)

🛡? 三大解決武器

武器1:依賴排除(精準拆除)

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><exclusions><exclusion>  <!-- 排除沖突零件 --><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion></exclusions>
</dependency>
武器2:依賴鎖定(版本固化)
<!-- 在dependencyManagement中鎖定版本 -->
<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version>
</dependency>
武器3:mvn命令分析(偵探工具)
# 查看依賴樹
mvn dependency:tree# 分析沖突
mvn dependency:analyze-duplicate# 終極武器:圖形化展示
mvn dependency:tree -DoutputFile=deps.txt

💡 沖突解決黃金法則:

“就近優先” → Maven會選擇依賴樹中離項目更近的版本

🏭 第四章:私服搭建——企業級樂高倉庫

🤔 為什么需要私服?

  • 加速構建(緩存常用依賴)
  • 托管內部二方庫
  • 安全隔離(避免直連外網)

🚧 Nexus私服踩坑記錄

坑1:默認admin密碼在哪?
# 安裝后第一次啟動時生成
nexus-install-dir/sonatype-work/nexus3/admin.password
坑2:上傳jar返回400錯誤
# 必須指定repository參數
curl -u admin:password --upload-file my.jar \
http://nexus:8081/repository/maven-releases/com/example/my/1.0/my-1.0.jar
坑3:代理中央倉庫慢
# 修改nexus/etc/nexus-default.properties
nexus.remote.storage.connection.timeout=60000
nexus.remote.storage.connection.max.total=200

🌟 最佳實踐配置

<!-- settings.xml 配置私服鏡像 -->
<mirror><id>nexus</id><url>http://nexus:8081/repository/maven-public/</url><mirrorOf>*</mirrorOf>
</mirror>

🧰 第五章:Maven高級工具包

🛠? 常用插件推薦

插件作用示例命令
versions依賴版本升級mvn versions:use-latest-versions
dependency分析依賴mvn dependency:analyze
spotbugs靜態代碼分析mvn spotbugs:check
jacoco測試覆蓋率mvn jacoco:report

💡 冷知識:依賴范圍(scope)詳解

<!-- 像選擇樂高使用場景 -->
<dependency><scope>compile</scope>   <!-- 默認值,全程參與 --><scope>provided</scope>  <!-- 容器會提供,如Servlet API --><scope>runtime</scope>   <!-- 僅運行時需要,如JDBC驅動 --><scope>test</scope>      <!-- 只在測試用,如JUnit -->
</dependency>

🌟 終極心法

"好的Maven項目應該像樂高大師的作品:

  • 模塊化:每個零件各司其職
  • 低耦合:更換零件不影響整體
  • 可追溯:版本明確不混亂"

👉 行動清單:

  • 用mvn dependency:tree檢查你的項目依賴樹
  • 嘗試將一個單體項目拆分成多模塊
  • 搭建本地Nexus私服體驗企業級管理

記住:依賴管理不是玄學,而是精確的積木拼裝藝術。現在就去優化你的"樂高作品"吧! 🧱?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84743.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

空間數據挖掘 期末復習

前言&#xff1a;此篇復習筆記結合了課程ppt和deepseek回答進行總結&#xff0c;如有謬誤懇請指正。 期末考例題 &#xff08;名詞解釋*10、簡答*6、論述*6&#xff09; 一、名詞解釋 數據挖掘 過擬合&#xff08;Overfitting&#xff09; Apriori算法 決策樹&#xff08;…

跳跳桿、彈跳桿、Poto stick:百年彈跳玩具的健康與使用分享(大模型改寫)

跳跳桿&#xff1a;百年彈跳神器的健康爭議與安全指南 &#xff08;用DeepSeek改寫前一篇文章&#xff0c;可惜沒有接廣告&#xff0c;否則植入一些鏈接多好&#xff09; &#x1f50d; 一、健康功效&#xff1a;驚喜與風險并存 爭議性健康主張 坊間流傳跳跳桿可能具備&…

WHAT - React Native 開發 App 從 0 到上線全流程周期

文章目錄 一、React Native App 開發流程總覽二、各階段詳細說明需求分析 & 產品規劃技術選型 & 方案確定項目初始化A. 使用 Expo&#xff08;推薦新手&#xff09;B. 使用 React Native CLI&#xff08;自由度更高&#xff09; UI 開發 功能開發&#xff08;主開發階…

Windows11 無法發現局域網內設備解決方法

臨時解決 發生問題絕大多數Windows11 24H2版本&#xff0c;該版本目前來看沒有永久解決方案 初步問題可以定位在FDResPub服務問題&#xff0c;重啟該服務可以短暫恢復&#xff0c;臨時解決方案就是重啟該服務&#xff0c;然后把網絡設備右鍵創建快捷方式 做成批處理文件 創建…

張 心理健康咨詢相關論文;AI心理咨詢數字孿生:個性化風格的突破

張 心理健康咨詢相關論文 EmoLLM:多模態情感理解與大型語言模型的結合 PsyDT:使用 LLM 構建具有個性化咨詢風格的心理咨詢師數字孿生 目前,大型語言模型 (LLM) 在心理咨詢領域取得了重大進展。然而,現有的心理健康 LLM 忽略了一個關鍵問題,即他們沒有考慮不同的心理咨…

通達信【千軍趨勢決策系統】幅圖指標

指標功能說明 本指標基于價格波動與趨勢轉折點,結合K線形態分析,提供多維度買賣信號,適用于股票、期貨等趨勢交易場景。 核心信號解讀 「橫掃千軍」 觸發條件:短期、中期、長期趨勢同時確認反轉向上。 用法:趨勢共振信號,提示較強多頭機會,可結合成交量驗證。 「出擊!…

大模型LoRA微調實踐

大模型LoRA微調實踐 準備工作 數據集&#xff1a;采用 GitHub 上的 Chinese-medical-dialogue-data 中文醫療對話數據集 Github地址如下&#xff1a; https://github.com/Toyhom/Chinese-medical-dialogue-data 微調模型&#xff1a; Qwen 1.5B模型&#xff08;Qwen2、2.5均…

跟著AI學習C#之項目實踐Day1

&#x1f9ed; 實戰項目&#xff1a;博客平臺系統 - Day1 &#x1f3d7;? 目標 創建新的 ASP.NET Core 項目添加 EF Core 和 Identity 支持實現用戶注冊、登錄功能運行并測試基本身份驗證流程 &#x1f5d2;? 任務清單 1. 創建新項目 打開 Visual Studio 或 Visual Studi…

Java面試復習指南:基礎、面向對象、Java 8新特性及并發編程

Java面試復習指南&#xff1a;基礎、面向對象、Java 8新特性、常用框架及并發編程 面試中&#xff0c;Java開發者常被問及多個核心技術點。本文從以下幾個方面幫助考生快速復習&#xff1a; Java基礎 概念解析&#xff1a;Java是一種面向對象的高級編程語言&#xff0c;具有…

微信小程序form表單手機號正則檢驗pattern失效

好奇怪啊&#xff0c;h5頁面校驗沒問題&#xff0c;在微信小程序模擬器以及真機運行都失效&#xff0c;排查半天&#xff0c;記錄一下 PS&#xff1a;身份證號校驗也沒問題&#xff0c;就手機號校驗有問題&#xff0c;奇奇怪怪的 之前的寫法&#xff08;在小程序上不生效&…

基于LQR的雙積分小車軌跡跟蹤控制系列(三)從連續到離散:雙積分小車狀態空間的數字實現

為什么要離散化&#xff1f; 以便在數字硬件和仿真程序中使用。 離散化的數學推導 連續狀態空間&#xff1a; 雙積分小車的簡化形式 由于雙積分小車的 A 矩陣結構簡單&#xff08;A0&#xff09;&#xff0c;矩陣指數可以化簡&#xff1a; Python實現&#xff08;示例代碼&am…

如何在服務器終端下載百度網盤數據

使用BaiduPCS-Go在終端實現遠程服務器對百度網盤數據的上傳與下載流程學習 BaiduPCS-Go可用于訪問和管理百度網盤文件資源的命令行客戶端下載百度網盤數據至服務器從服務器中上傳文件至百度網盤中BaiduPCS-Go可用于訪問和管理百度網盤文件資源的命令行客戶端 下載百度網盤數據…

消息隊列:基本知識

定義 隊列 Queue 是一種先進先出的數據結構&#xff0c;所以消費消息時也是按照順序來消費的 消息隊列看作是一個存放消息的容器&#xff0c;需要使用消息的時候&#xff0c;直接從容器中取出消息供自己使用即可 參與消息傳遞的雙方稱為 生產者 和 消費者 生產者負責發送消…

算法-動態規劃-鋼條切割問題

鋼條切割問題是一個經典的動態規劃問題&#xff0c;旨在通過切割鋼條獲得最大收益。以下是詳細解釋和解決方案&#xff1a; 問題描述 給定長度為 n 的鋼條和價格表 p&#xff0c;其中 p[i] 表示長度為 i 的鋼條的價格&#xff08;i 1, 2, ..., n&#xff09;。目標&#xff…

DeepSeek:中國AI開源先鋒的技術突破與行業革新

在人工智能技術迅猛發展的浪潮中&#xff0c;DeepSeek&#xff08;深度求索&#xff09;作為中國AI領域的新銳力量&#xff0c;憑借其創新的技術路線和開源策略&#xff0c;正在全球AI舞臺上嶄露頭角。這家由知名量化投資機構幻方量化支持的AI公司&#xff0c;自2023年7月成立以…

cmake:動態鏈接庫(dll)的調用

如題,動態鏈接庫的調用和靜態鏈接庫有所不同,現將步驟整理如下。 動態鏈接庫文件 正常情況下,編譯的動態鏈接庫有五個生成文件和對應的頭文件,在調用中,使用dll文件,lib文件 和頭文件。編譯生成動態庫的步驟和配置見C++:動態鏈接庫的編寫,__declspec 用法詳解-CSDN博…

SAP調用api

之前是把SAP程序封裝成api&#xff0c;然后又接到了需求是sap調用其他api&#xff0c;直接上代碼吧 FUNCTION ZRFC_PP_016. *"---------------------------------------------------------------------- *"*"Local interface: *" IMPORTING *" …

Idea/Pycharm用法總結

在目錄里展開當前文件

Python打卡訓練營Day56

DAY 56 時序數據的檢驗 知識點回顧&#xff1a; 假設檢驗基礎知識 原假設與備擇假設P值、統計量、顯著水平、置信區間 白噪聲 白噪聲的定義自相關性檢驗&#xff1a;ACF檢驗和Ljung-Box 檢驗偏自相關性檢驗&#xff1a;PACF檢驗 平穩性 平穩性的定義單位根檢驗 季節性檢驗 ACF檢…

[GESP202312 五級] 烹飪問題

題目描述 有 N N N 種食材&#xff0c;編號從 0 0 0 至 N ? 1 N-1 N?1&#xff0c;其中第 i i i 種食材的美味度為 a i a_i ai?。 不同食材之間的組合可能產生奇妙的化學反應。具體來說&#xff0c;如果兩種食材的美味度分別為 x x x 和 y y y &#xff0c;那么它們…