成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談 Maven 輕松重構項目

開發 項目管理
現在是微服務盛行時代,說不準哪一天領導就會讓你對一個大項目進行重構。大項目的痛點:編譯慢、發布繁瑣等。

[[375866]]

現在是微服務盛行時代,說不準哪一天領導就會讓你對一個大項目進行重構。大項目的痛點:編譯慢、發布繁瑣等。就像下面這張圖:

[[375867]]

真的不敢動呀,一不小心就坍塌了。

比如說我們用戶系統,我們可以這么重構(這里只是舉例,每個項目拆分目的可能不同)。

user-system拆分成:

  • user-web
  • user-service
  • user-dao
  • user-common

我們對其拆分后很有可能存在多個子項目中同時依賴某個jar包,如果使用不當可能會導致每個模塊使用的版本不一樣,所以想想能不能有什么方式來解決這類問題呢?

答案:能。但是得先了解兩個概念:聚合和繼承。

聚合

所謂的聚合就是我們如果想一次性構建多個項目模塊,那我們就需要把這些項目模塊進行聚合。

配置模板

  1. <modules> 
  2.     <module>項目模塊一</module> 
  3.     <module>項目模塊二</module> 
  4.     <module>項目模塊三</module> 
  5.     <module>項目模塊...</module> 
  6. </modules> 

使用方式

比如我們對user-web、user-service、user-dao、user-common四個項目模塊進行聚合。

  1. <modules> 
  2.     <module>user-web</module> 
  3.     <module>user-service</module> 
  4.     <module>user-dao</module> 
  5.     <module>user-common</module> 
  6. </modules> 

注意:其中module的路徑為相對路徑。

這樣就解決了我們項目模塊的聚合,我們再來看看maven是如何來解決由于重復依賴導致版本不一樣的問題。

繼承

繼承為了消除重復,我們把很多相同的配置提取出來,例如:grouptId,version等 。

繼承的配置  

  1. <parent> 
  2.     <artifactId>maven-demo</artifactId> 
  3.     <groupId>com.tian</groupId> 
  4.     <version>1.0-SNAPSHOT</version> 
  5. </parent> 

繼承代碼中定義屬性

繼承代碼過程中,可以定義屬性,例如:

  1. <properties> 
  2.    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  3.    <junit.version>4.13.1</junit.version> 
  4.    <maven.version>0.0.1-SNAPSHOT</maven.version> 
  5. </properties> 

訪問屬性的方式為${junit.version},例如:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" 
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  5.     <parent> 
  6.         <artifactId>maven-demo</artifactId> 
  7.         <groupId>com.tian</groupId> 
  8.         <version>1.0-SNAPSHOT</version> 
  9.     </parent> 
  10.     <modelVersion>4.0.0</modelVersion> 
  11.  
  12.     <artifactId>user-web</artifactId> 
  13.  
  14.     <dependencies> 
  15.         <dependency> 
  16.             <groupId>junit</groupId> 
  17.             <artifactId>junit</artifactId> 
  18.             <!-- 使用了parent中 junit.version --> 
  19.             <version>${junit.version}</version> 
  20.         </dependency> 
  21.     </dependencies> 
  22. </project> 

這樣我們就可以使用到上面定義的屬性junit.version=4.13.1。

父模塊用dependencyManagement進行管理

由于項目模塊較多,所以我們又抽象了一層,抽出一個parent來管理子項目的公共的依賴。為了項目的正確運行,必須讓所有的子項目使用依賴項的統一版本,必須確保應用的各個項目的依賴項和版本一致,才能保證測試的和發布的是相同的結果。

  1. <dependencyManagement> 
  2.     <dependencies> 
  3.      <dependency> 
  4.         <groupId>junit</groupId> 
  5.         <artifactId>junit</artifactId> 
  6.         <version>${junit.version}</version> 
  7.         <scope>test</scope> 
  8.       </dependency> 
  9.      </dependencies> 
  10. </dependencyManagement> 

這樣的好處是子模塊可以有選擇性的繼承,而不需要全部繼承。

 

這樣做的好處:統一管理項目的版本號,確保應用的各個項目的依賴和版本一致,才能保證測試的和發布的是相同的成果,因此,在頂層pom中定義共同的依賴關系。同時可以避免在每個使用的子項目中都聲明一個版本號,這樣想升級或者切換到另一個版本時,只需要在父類容器里更新,不需要任何一個子項目的修改;如果某個子項目需要另外一個版本號時,只需要在dependencies中聲明一個版本號即可。子類就會使用子類聲明的版本號,不繼承于父類版本號。

聚合和繼承的關系

在前面我們構建多模塊項目中,關系如下

 

mavendemo就是user-web、user-service等幾個模塊的父項目。

父項目主要是用來配置一些公共的配置,其它三個項目再通過繼承的方式擁有父項目中的配置,首先配置父項目的pom.xml,添加對項目的user-web、user-service、user-dao、user-common這四個模塊進行聚合以及jar包依賴。

相對于dependencyManagement,所有生命在dependencies里的依賴都會自動引入,并默認被所有的子項目繼承。

面試題:dependencyManagement和dependencies的區別

  • dependencyManagement里只是聲明依賴,并不實現引入,因此子項目需要顯示的聲明需要用的依賴。如果不在子項目中聲明依賴,是不會從父項目中繼承下來的;只有在子項目中寫了該依賴項,并且沒有指定具體版本,才會從父項目中繼承該項,并且version和scope都讀取自父pom;另外如果子項目中指定了版本號,那么會使用子項目中指定的jar版本。
  • dependencies即使在子項目中不寫該依賴項,那么子項目仍然會從父項目中繼承該依賴項(全部繼承)。

IDEA中配置

Maven在使用IDEA開發時,如何將Maven配置呢?

打開IDEA,在File--->Settings。輸入欄搜索:maven

 

配置我們之前安裝好的maven目錄、maven下面的setting.xml以及本地倉庫目錄。然后Apply--->OK。

 

我們項目對某個項目進行clean 等操作的時候,就可以直接雙擊Lifcycle下面的。

 

這樣我們就把Maven集成到我們的IDEA中來了。

編譯運行項目

我們可以在父項目中對所有子項目進行編譯、打包等。我們就來對所有子模塊進行打包。

 

然后在對應子項目中可以找到target目錄和對應的jar包。

 

也可單獨對某個子項目進行打包等操作。比如我們對user-common進行clean。

 

于是,此時的user-common下的target已經被刪掉,其他子項目中并沒有收到影響。

IDEA中如何創建多項目模塊

先創建一個user-parent的maven項目:

 

然后把src目錄刪掉,創建子項目:

選中user-parent項目,右鍵,選中New-->Module

 

來到New Module界面,選擇Maven,選好自己的本地安裝的JDK。

 

next。填寫子項目名稱,我們這里創建一個user-web的子項目:

 

注意這里user-web,默認是userweb,需要我們手工在兩個單詞之間添加橫線:

 

點擊Finish:

 

然后在看看user-parent的pom中的內容:

 

已經添加了modules,同時把我們的user-web添加進去了。

同樣方法,我們就可以創建更多字項目了:

 

再看看user-parent中的pom.xml文件內容:

 

到這里,我們就輕輕松松的構建了我們這個大項目user-parent,該項目包括了user-web,user-service,user-dao,-user-commmon子項目。

若是新建多模塊項目,安裝上面的步驟就搞定了。

若是大項目拆分,我們就可以使用上面的方式先創建好自己的多模塊項目,然后對應把大項目里的內容拷貝到對應模塊中(需要注意此時子模塊直接肯定會有相互依賴的)。

總結

通過繼承,我們可以定義項目的父類項目,用于繼承父項目的依賴、插件、屬性等信息。聚合就是我們如果想一次性構建多個項目模塊,那我們就需要對這些項目模塊進行聚合。

構建多模塊項目,在IDEA中使用創建Module的方式很輕松就可以創建了。在父項目中使用來管理子模塊的依賴相關依賴。 

對大項目進行重構時,只需要把各模塊拆分出來的代碼拷貝到對應子模塊就可以了。

本文轉載自微信公眾號「 Java后端技術全棧」,可以通過以下二維碼關注。轉載本文請聯系 Java后端技術全棧公眾號。

 

責任編輯:武曉燕 來源: Java后端技術全棧
相關推薦

2017-03-06 17:00:37

SSMMaven結構

2022-12-05 08:55:39

MavenGradle項目

2013-03-19 09:33:46

項目

2009-09-24 09:55:15

Java Hibern

2023-04-06 08:00:00

JavaValhalla項目

2015-07-09 10:55:59

開放容器項目DockerCon云計算

2017-07-07 16:07:41

2012-05-15 01:16:19

開發重構Java

2011-08-16 09:23:08

項目管理

2023-10-20 08:04:34

系統重構實踐

2023-02-27 07:40:00

系統重構前端

2010-05-28 09:47:43

SVN項目創建

2014-05-20 10:09:54

Intellij IDMaven Web

2025-05-23 08:25:00

maven開發模塊

2022-02-28 08:23:02

開源項目重構

2021-08-03 08:13:48

重構API代碼

2010-06-01 09:33:48

SVN創建管理項目

2010-04-12 10:11:59

Visual Stud

2017-03-20 18:03:51

2011-06-07 16:47:28

Android 重構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产视频二区在线观看 | 免费性视频| www在线视频 | 欧美中文字幕一区二区三区亚洲 | 国产精品不卡一区 | 久久久精| 91p在线观看 | 国产精品久久久久久久久久久免费看 | 亚洲自拍偷拍视频 | jizz18国产 | 91久久久久久久久久久 | 中文字幕乱码亚洲精品一区 | 羞羞视频一区二区 | 狠狠爱一区二区三区 | 成人三级在线播放 | 日韩av网址在线观看 | 色.com| 亚洲国产一区二区三区 | 99视频在线免费观看 | 久久人体视频 | 欧洲免费毛片 | 亚洲草草视频 | 亚洲精品一区二区网址 | 国产精品久久欧美久久一区 | 欧美久| 四虎最新视频 | 91精品国产777在线观看 | 欧美精品一二区 | 成人在线视频观看 | 另类视频在线 | 97超碰成人 | 欧美亚洲国产日韩 | 精品国产一级 | 久久精品欧美一区二区三区不卡 | 久久精品在线 | 日韩中文字幕免费在线观看 | 亚洲精品国产一区 | 色www精品视频在线观看 | 亚洲一av | 国产一区中文字幕 | 夜夜精品浪潮av一区二区三区 |