日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
談?wù)凪aven輕松重構(gòu)項(xiàng)目

現(xiàn)在是微服務(wù)盛行時代,說不準(zhǔn)哪一天領(lǐng)導(dǎo)就會讓你對一個大項(xiàng)目進(jìn)行重構(gòu)。大項(xiàng)目的痛點(diǎn):編譯慢、發(fā)布繁瑣等。就像下面這張圖:

公司主營業(yè)務(wù):網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出范縣免費(fèi)做網(wǎng)站回饋大家。

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

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

user-system拆分成:

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

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

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

聚合

所謂的聚合就是我們?nèi)绻胍淮涡詷?gòu)建多個項(xiàng)目模塊,那我們就需要把這些項(xiàng)目模塊進(jìn)行聚合。

配置模板

 
 
 
 
  1.  
  2.     項(xiàng)目模塊一 
  3.     項(xiàng)目模塊二 
  4.     項(xiàng)目模塊三 
  5.     項(xiàng)目模塊... 
  6.  

使用方式

比如我們對user-web、user-service、user-dao、user-common四個項(xiàng)目模塊進(jìn)行聚合。

 
 
 
 
  1.  
  2.     user-web 
  3.     user-service 
  4.     user-dao 
  5.     user-common 
  6.  

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

這樣就解決了我們項(xiàng)目模塊的聚合,我們再來看看maven是如何來解決由于重復(fù)依賴導(dǎo)致版本不一樣的問題。

繼承

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

繼承的配置  

 
 
 
 
  1.  
  2.     maven-demo 
  3.     com.tian 
  4.     1.0-SNAPSHOT 
  5.  

繼承代碼中定義屬性

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

 
 
 
 
  1.  
  2.    UTF-8 
  3.    4.13.1 
  4.    0.0.1-SNAPSHOT 
  5.  

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

 
 
 
 
  1.  
  2.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
  4.      
  5.         maven-demo 
  6.         com.tian 
  7.         1.0-SNAPSHOT 
  8.      
  9.     4.0.0 
  10.  
  11.     user-web 
  12.  
  13.      
  14.          
  15.             junit 
  16.             junit 
  17.              
  18.             ${junit.version} 
  19.          
  20.      
  21.  

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

父模塊用dependencyManagement進(jìn)行管理

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

 
 
 
 
  1.  
  2.      
  3.       
  4.         junit 
  5.         junit 
  6.         ${junit.version} 
  7.         test 
  8.        
  9.       
  10.  

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

 

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

聚合和繼承的關(guān)系

在前面我們構(gòu)建多模塊項(xiàng)目中,關(guān)系如下

 

mavendemo就是user-web、user-service等幾個模塊的父項(xiàng)目。

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

相對于dependencyManagement,所有生命在dependencies里的依賴都會自動引入,并默認(rèn)被所有的子項(xiàng)目繼承。

面試題:dependencyManagement和dependencies的區(qū)別

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

IDEA中配置

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

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

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

我們項(xiàng)目對某個項(xiàng)目進(jìn)行clean 等操作的時候,就可以直接雙擊Lifcycle下面的。

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

編譯運(yùn)行項(xiàng)目

我們可以在父項(xiàng)目中對所有子項(xiàng)目進(jìn)行編譯、打包等。我們就來對所有子模塊進(jìn)行打包。

然后在對應(yīng)子項(xiàng)目中可以找到target目錄和對應(yīng)的jar包。

也可單獨(dú)對某個子項(xiàng)目進(jìn)行打包等操作。比如我們對user-common進(jìn)行clean。

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

IDEA中如何創(chuàng)建多項(xiàng)目模塊

先創(chuàng)建一個user-parent的maven項(xiàng)目:

然后把src目錄刪掉,創(chuàng)建子項(xiàng)目:

選中user-parent項(xiàng)目,右鍵,選中New-->Module

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

next。填寫子項(xiàng)目名稱,我們這里創(chuàng)建一個user-web的子項(xiàng)目:

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

點(diǎn)擊Finish:

然后在看看user-parent的pom中的內(nèi)容:

已經(jīng)添加了modules,同時把我們的user-web添加進(jìn)去了。

同樣方法,我們就可以創(chuàng)建更多字項(xiàng)目了:

再看看user-parent中的pom.xml文件內(nèi)容:

到這里,我們就輕輕松松的構(gòu)建了我們這個大項(xiàng)目user-parent,該項(xiàng)目包括了user-web,user-service,user-dao,-user-commmon子項(xiàng)目。

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

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

總結(jié)

通過繼承,我們可以定義項(xiàng)目的父類項(xiàng)目,用于繼承父項(xiàng)目的依賴、插件、屬性等信息。聚合就是我們?nèi)绻胍淮涡詷?gòu)建多個項(xiàng)目模塊,那我們就需要對這些項(xiàng)目模塊進(jìn)行聚合。

構(gòu)建多模塊項(xiàng)目,在IDEA中使用創(chuàng)建Module的方式很輕松就可以創(chuàng)建了。在父項(xiàng)目中使用來管理子模塊的依賴相關(guān)依賴。 

對大項(xiàng)目進(jìn)行重構(gòu)時,只需要把各模塊拆分出來的代碼拷貝到對應(yīng)子模塊就可以了。

本文轉(zhuǎn)載自微信公眾號「 Java后端技術(shù)全棧」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系 Java后端技術(shù)全棧公眾號。


文章題目:談?wù)凪aven輕松重構(gòu)項(xiàng)目
路徑分享:http://www.dlmjj.cn/article/coeeepj.html