📘博客主頁:程序員葵安
🫶感謝大家點贊👍🏻收藏?評論?🏻
????????????????文章目錄
一、分模塊設計與開發
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倉庫中。
?