【Java Web】9.Maven高級

📘博客主頁:程序員葵安

🫶感謝大家點贊👍🏻收藏?評論?🏻

????????????????文章目錄

一、分模塊設計與開發

1.1 介紹?

1.2 實踐

二、繼承與聚合

2.1 繼承

繼承關系

版本鎖定?

2.2 聚合

2.3 繼承與聚合對比

三、私服

3.1 介紹?

3.2 資源上傳與下載?


一、分模塊設計與開發

1.1 介紹?

分模塊設計指的就是在設計一個 Java 項目的時候,將項目按照功能/結構拆分成若干個子模塊,方便項目的管理維護、拓展,也方便模塊鍵的相互調用、資源共享。

1.2 實踐

分析

  • 將pojo包下的實體類,抽取到一個maven模塊中 tlias-pojo

  • 將utils包下的工具類,抽取到一個maven模塊中 tlias-utils

  • 其他的業務代碼,放在tlias-web-management這個模塊中,在該模塊中需要用到實體類pojo、工具類utils,直接引入對應的依賴即可。

注意:分模塊開發需要先針對模塊功能進行設計,再進行編碼。不會先將工程開發完畢,然后進行拆分。

實現

1. 創建maven模塊 tlias-pojo,存放實體類

A. 創建一個正常的Maven模塊,模塊名tlias-pojo

B. 然后在tlias-pojo中創建一個包 com.itheima.pojo (和原來案例項目中的pojo包名一致)

C. 將原來案例項目 tlias-web-management 中的pojo包下的實體類,復制到tlias-pojo模塊中

D. 在 tlias-pojo 模塊的pom.xml文件中引入依賴

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>
</dependencies>

E. 刪除原有案例項目tlias-web-management的pojo包,然后在pom.xml中引入 tlias-pojo的依賴

<dependency><groupId>com.itheima</groupId><artifactId>tlias-pojo</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

2. 創建Maven模塊 tlias-utils,存放相關工具類

A. 創建一個正常的Maven模塊,模塊名tlias-utils

B. 然后在 tlias-utils 中創建一個包 com.itheima.utils

C. 將原來案例項目 tlias-web-management 中的utils包下的實體類,復制到tlias-utils模塊中

D. 在 tlias-utils 模塊的pom.xml文件中引入依賴

<dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><!--阿里云OSS--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- no more than 2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version></dependency><!--WEB開發--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>
</dependencies>

E. 刪除原有案例項目tlias-web-management的utils包,然后在pom.xml中引入 tlias-utils的依賴

<dependency><groupId>com.itheima</groupId><artifactId>tlias-utils</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

二、繼承與聚合

tlias-pojo、tlias-utils、tlias-web-management中都引入了一個依賴 lombok 的依賴,比較繁瑣,可以用Maven的繼承來解決這個問題

2.1 繼承

創建一個父工程 tlias-parent ,讓上述的三個模塊 tlias-pojo、tlias-utils、tlias-web-management 都來繼承這個父工程。將各個模塊中都共有的依賴提取到父工程 tlias-parent中進行配置,只要子工程繼承了父工程,依賴它也會繼承下來,這樣就無需在各個子工程中進行配置了。

  • 概念:繼承描述的是兩個工程間的關系,與java中的繼承相似,子工程可以繼承父工程中的配置信息,常見于依賴關系的繼承。

  • 作用:簡化依賴配置、統一管理依賴

  • 實現
<parent><groupId>...</groupId><artifactId>...</artifactId><version>...</version><relativePath>....</relativePath>
</parent>
繼承關系

上面的案例有點特殊,因為所有的springboot項目都有一個統一的父工程,就是spring-boot-starter-parent,Maven不支持多繼承,故要讓創建的三個模塊都繼承tlias-parent,而tlias-parent 再繼承 spring-boot-starter-parent

1). 創建maven模塊 tlias-parent ,該工程為父工程,設置打包方式pom(默認jar)。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/> <!-- lookup parent from repository -->
</parent><groupId>com.itheima</groupId>
<artifactId>tlias-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

Maven打包方式:

  • jar:普通模塊打包,springboot項目基本都是jar包(內嵌tomcat運行)

  • war:普通web程序打包,需要部署在外部的tomcat服務器中運行

  • pom:父工程或聚合工程,該模塊不寫代碼,僅進行依賴管理

2). 在子工程的pom.xml文件中,配置繼承關系。

<parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../tlias-parent/pom.xml</relativePath>
</parent><artifactId>tlias-utils</artifactId>
<version>1.0-SNAPSHOT</version>

注意:

  • 在子工程中,配置了繼承關系之后,坐標中的groupId是可以省略的,因為會自動繼承父工程的 。

  • relativePath指定父工程的pom文件的相對位置(如果不指定,將從本地倉庫/遠程倉庫查找該工程)。

    • ../ 代表的上一級目錄

3). 在父工程中配置各個工程共有的依賴(子工程會自動繼承父工程的依賴)。

<dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>
</dependencies>

實際項目中,可能會見到下面的工程結構,父子工程結構更加清晰、更加直觀?:

版本鎖定?

在maven中,可以在父工程的pom文件中通過 <dependencyManagement> 來統一管理依賴版本。

父工程:

<!--統一管理依賴版本-->
<dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency></dependencies>
</dependencyManagement>

子工程:

<dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>
</dependencies>

注意:

  • 在父工程中所配置的 <dependencyManagement> 只能統一管理依賴版本,并不會將這個依賴直接引入進來。 這點和 <dependencies> 是不同的。

  • 子工程要使用這個依賴,還是需要引入的,只是此時就無需指定 <version> 版本號了,父工程統一管理。變更依賴版本,只需在父工程中統一變更。

屬性配置

通過自定義屬性及屬性引用的形式,在父工程中將依賴的版本號進行集中管理維護。

具體語法:

1). 自定義屬性

<properties><lombok.version>1.18.24</lombok.version>
</properties>

?2). 引用屬性

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version>
</dependency>

面試題:<dependencyManagement><dependencies> 的區別是什么?

  • <dependencies> 是直接依賴,在父工程配置了依賴,子工程會直接繼承下來。

  • <dependencyManagement> 是統一管理依賴版本,不會直接依賴,還需要在子工程中引入所需依賴(無需指定版本)

2.2 聚合

  • 聚合:將多個模塊組織成一個整體,同時進行項目的構建。

  • 聚合工程:一個不具有業務功能的“空”工程(有且僅有一個pom文件) 【一般來說,繼承關系中的父工程與聚合關系中的聚合工程是同一個】

  • 作用:快速構建項目(無需根據依賴關系手動構建,直接在聚合工程上構建即可)

在tlias-parent中,添加如下配置,來指定當前聚合工程,需要聚合的模塊:

<!--聚合其他模塊-->
<modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module>
</modules>

此時,要進行編譯、打包、安裝操作,就無需在每一個模塊上操作了。只需在聚合工程上統一進行操作。

2.3 繼承與聚合對比

  • 作用

    • 聚合用于快速構建項目

    • 繼承用于簡化依賴配置、統一管理依賴

  • 相同點:

    • 聚合與繼承的pom.xml文件打包方式均為pom,通常將兩種關系制作到同一個pom文件中

    • 聚合與繼承均屬于設計型模塊,并無實際的模塊內容

  • 不同點:

    • 聚合是在聚合工程中配置關系,聚合可以感知到參與聚合的模塊有哪些

    • 繼承是在子模塊中配置關系,父模塊無法感知哪些子模塊繼承了自己

三、私服

3.1 介紹?

  • 私服:是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,用來代理位于外部的中央倉庫,用于解決團隊內部的資源共享與資源同步問題。

  • 依賴查找順序:

    • 本地倉庫

    • 私服倉庫

    • 中央倉庫

  • 注意事項:私服在企業項目開發中,一個項目/公司,只需要一臺即可(無需我們自己搭建,會使用即可)。

3.2 資源上傳與下載?

資源上傳與下載,我們需要做三步配置,執行一條指令。

第一步配置:在maven的配置文件中配置訪問私服的用戶名、密碼(在自己maven安裝目錄下的conf/settings.xml中的servers中配置)

<server><id>maven-releases</id><username>用戶名</username><password>密碼</password>
</server><server><id>maven-snapshots</id><username>用戶名</username><password>密碼</password>
</server>

第二步配置:在maven的配置文件中配置連接私服的地址(url地址)(在自己maven安裝目錄下的conf/settings.xml中的mirrors、profiles中配置)

<mirror><id>maven-public</id><mirrorOf>*</mirrorOf><url>maven-public的url地址</url>
</mirror>
<profile><id>allow-snapshots</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>maven-public</id><url>maven-public的url地址</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
</profile>

第三步配置:在項目的pom.xml文件中配置上傳資源的位置(url地址)(直接在tlias-parent中配置發布地址)

<distributionManagement><!-- release版本的發布地址 --><repository><id>maven-releases</id><url>maven-releases的url地址</url></repository><!-- snapshot版本的發布地址 --><snapshotRepository><id>maven-snapshots</id><url>maven-snapshots的url地址</url></snapshotRepository>
</distributionManagement>

配置好了上述三步之后,要上傳資源到私服倉庫,就執行執行maven生命周期:deploy。

私服倉庫說明:

  • RELEASE:存儲自己開發的RELEASE發布版本的資源。

  • SNAPSHOT:存儲自己開發的SNAPSHOT發布版本的資源。

  • Central:存儲的是從中央倉庫下載下來的依賴。

項目版本說明:

  • RELEASE(發布版本):功能趨于穩定、當前更新停止,可以用于發行的版本,存儲在私服中的RELEASE倉庫中。

  • SNAPSHOT(快照版本):功能不穩定、尚處于開發中的版本,即快照版本,存儲在私服的SNAPSHOT倉庫中。

?

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

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

相關文章

MySQL 全量、增量備份與恢復

一.MySQL 數據庫備份概述 備份的主要目的是災難恢復&#xff0c;備份還可以測試應用、回滾數據修改、查詢歷史數據、審計等。之前已經學習過如何安裝 MySQL&#xff0c;本小節將從生產運維的角度了解備份恢復的分類與方法。 1 數據備份的重要性 在企業中數據的價值至關…

第六個微信小程序:教師工具集

源于工作需要&#xff0c;下面開始。 安裝及使用 | Taro 文檔 vscode 代碼管理 git 輔助 開發技術如上&#xff1a; 1.開始創建模板 taro4.1.1 $ taro init teachers-tools 2.用vsocde開始吧。 選擇 第二個文件夾找一。 (base) PS D:\react\teachers-tools> pnpm…

Linux 里 su 和 sudo 命令這兩個有什么不一樣?

《小菜狗 Linux 操作系統快速入門筆記》目錄&#xff1a; 《小菜狗 Linux 操作系統快速入門筆記》&#xff08;01.0&#xff09;文章導航目錄【實時更新】 Linux 是一個多用戶的操作系統。在 Linux 中&#xff0c;理論上來說&#xff0c;我們可以創建無數個用戶&#xff0c;但…

Elastic 獲得 AWS 教育 ISV 合作伙伴資質,進一步增強教育解決方案產品組合

作者&#xff1a;來自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通過搜索 AI 和云創新推動教育領域的數字化轉型。 我們非常高興地宣布&#xff0c;Elastic 已獲得 AWS 教育 ISV 合作伙伴資質。這一重要認證表明&#xff0c;Elastic 作為 …

服務器被攻擊了怎么辦

可以上一個高防IP或者AI云防護都是可以的。&#xff08;有效防御CC、APl接口、http、tcp、WEB應用掃描/爬蟲、SYN、WAF、DDOS、UDP、入侵、滲透、SQL注入、XSS跨站腳本攻擊、遠程惡意代碼執行、session fixation、Webshell攻擊、惡意請求&#xff0c;惡意掃描、暴力破解、CSRF等…

【學習筆記】Circuit Tracing: Revealing Computational Graphs in Language Models

Circuit Tracing: Revealing Computational Graphs in Language Models 替代模型(Replacement Model)&#xff1a;用更多的可解釋的特征來替代transformer模型的神經元。 歸因圖(Attribution Graph)&#xff1a;展示特征之間的相互影響&#xff0c;能夠追蹤模型生成輸出時所采用…

靈活控制,modbus tcp轉ethernetip的 多功能水處理方案

油田自動化和先進的油氣行業軟件為油氣公司帶來了諸多益處。其中包括&#xff1a; 1.自動化可以消除多余的步驟、減少人為錯誤并降低運行設備所需的能量&#xff0c;從而降低成本。 2.油天然氣行業不斷追求高水平生產。自動化可以更輕松地減少計劃外停機時間&#xff0c;從而…

是否存在路徑(FIFOBB算法)

題目描述 一個具有 n 個頂點e條邊的無向圖&#xff0c;該圖頂點的編號依次為0到n-1且不存在頂點與自身相連的邊。請使用FIFOBB算法編寫程序&#xff0c;確定是否存在從頂點 source到頂點 destination的路徑。 輸入 第一行兩個整數&#xff0c;分別表示n 和 e 的值&#xff08;1…

windows VeraCrypt – 磁盤加密工具

下載鏈接&#xff1a;夸克網盤分享 VeraCrypt一款跨平臺(Windows/Mac/Linux)的磁盤加密工具&#xff0c;提供多層級數據保護方案&#xff1a;虛擬加密盤&#xff1a;在文件中創建可掛載的加密虛擬磁盤全設備加密&#xff1a;支持分區/USB/硬盤等存儲設備的全盤加密系統盤加密&…

客戶體驗數據使用的三種視角——場景視角

當企業收集到大量的客戶體驗數據之后&#xff0c;應該如何應用&#xff1f;有哪些主要的使用場景和分析視角&#xff1f;體驗家團隊通過三篇文章&#xff0c;陸續介紹三種體驗數據的使用場景&#xff0c;以幫助企業更有效地利用體驗數據進行改進。 01 宏觀層次的“旅程視角” …

時序數據庫IoTDB的UDF Sample算法在數據監控、故障預防的應用

一、數據監控在工業物聯網中的重要性 設備數據監控是工業物聯網&#xff08;IoT&#xff09;中最為廣泛應用的領域之一。通過實時監控工廠機械設備的運行狀態&#xff0c;企業能夠提前發現設備的潛在故障&#xff0c;從而實現預防性維護與可預測性維護。這一做法不僅能有效提升…

fastadmin fildList 動態下拉框默認選中

html頁面 <td><select class"form-control dtselect" data-rule"required" data-dtselected"<%row.type%>" name"<%name%>[<%index%>][type]">{foreach nametypeList idvo}<option value"{$vo…

Python 入門到進階全指南:從語言特性到實戰項目

一、Python 簡介 Python 是一種高級、跨平臺、解釋型編程語言&#xff0c;以簡潔語法和高可讀性著稱&#xff0c;既適合編程初學者快速入門&#xff0c;也能滿足資深開發者的復雜需求。其核心特性與應用場景如下&#xff1a; 核心特性解析 解釋型語言&#xff1a;無需編譯即可…

【unity游戲開發入門到精通——通用篇】從零掌握UnityWebRequest:文件下載、表單提交、超時處理、斷點續傳

文章目錄 一、UnityWebRequest 與 WWW 的比較二、核心組件三、常用方法四、基本使用示例1. GET請求2. POST請求五、實用功能1. 下載進度顯示2. 斷點續傳實現3. 文件上傳到服務器六、使用建議七、性能優化專欄推薦完結一、UnityWebRequest 與 WWW 的比較 UnityWebRequest 是 Un…

使用 Flutter 開發 App 時,想要根據 Figma 設計稿開發出響應式 UI 界面

在使用 Flutter 開發 App 時&#xff0c;想要根據 Figma 設計稿開發出響應式 UI 界面&#xff08;Responsive UI&#xff09;&#xff0c;以適配不同尺寸和分辨率的手機設備&#xff0c;需要從 設計階段 和 編碼實現階段 雙向配合。以下是詳細的實現思路與方法&#xff1a; &am…

【計算機網絡】網絡層協議

1. ICMP協議的介紹及應用 IP協議的助手 —— ICMP 協議 ping 是基于 ICMP 協議工作的&#xff0c;所以要明白 ping 的工作&#xff0c;首先我們先來熟悉 ICMP 協議。 ICMP 全稱是 Internet Control Message Protocol&#xff0c;也就是互聯網控制報文協議。 里面有個關鍵詞 …

LabVIEW準分子激光器智能控制系統

LabVIEW 開發準分子激光器智能控制系統&#xff0c;針對放電激勵型準分子激光器強電磁干擾環境下的控制難題&#xff0c;采用 “PC 端 LabVIEW 人機交互 MCU 端實時控制 光纖隔離通信” 架構&#xff0c;實現激光能量閉環控制、腔體環境監測、氣路自動管理等功能。硬件選用 N…

BUUCTF[極客大挑戰 2019]EasySQL 1題解

[極客大挑戰 2019]EasySQL題解 分析解題過程漏洞原理分析明確注入點&#xff1a;嘗試萬能密碼法法一法二 總結 分析 從題目分析&#xff0c;這道題應該與SQL注入有關&#xff0c;啟動靶機之后&#xff0c;訪問url是一個登錄界面&#xff0c;隨便輸入用戶名密碼之后&#xff0…

05.MySQL表的約束

MySQL表的約束 MySQL表的約束 1. 空屬性 2. 默認值 3. 列描述 4. zerofill 5. 主鍵 6. 自增長 7. 唯一鍵 8. 外鍵 9. 綜合案例 MySQL表的約束 說到 MySQL 表的約束&#xff0c;這絕對是數據庫設計里繞不開的一個話題。很多人一提“約束”&#xff0c;第一反應可能是字段的數據…

Web3如何重塑數據隱私的未來

在這個信息爆炸的時代&#xff0c;數據隱私已成為我們不得不面對的嚴峻問題。Web3&#xff0c;作為下一代互聯網的代表&#xff0c;以其去中心化、用戶主權和數據安全等特點&#xff0c;正在重塑數據隱私的未來。它不僅僅是技術的革新&#xff0c;更是對個人隱私保護理念的一次…