Maven高級(jí)操作HM(Java項(xiàng)目管理工具)_第1頁(yè)
Maven高級(jí)操作HM(Java項(xiàng)目管理工具)_第2頁(yè)
Maven高級(jí)操作HM(Java項(xiàng)目管理工具)_第3頁(yè)
Maven高級(jí)操作HM(Java項(xiàng)目管理工具)_第4頁(yè)
Maven高級(jí)操作HM(Java項(xiàng)目管理工具)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Maven高級(jí)操作HMMaven高級(jí) \hWeb開(kāi)發(fā)講解完畢之后,我們?cè)賮?lái)學(xué)習(xí)Maven高級(jí)。其實(shí)在前面的課程當(dāng)中,我們已經(jīng)學(xué)習(xí)了Maven。我們講到Maven是一款構(gòu)建和管理Java項(xiàng)目的工具。經(jīng)過(guò)前面10多天web開(kāi)發(fā)的學(xué)習(xí),相信大家對(duì)于Maven這款工具的基本使用應(yīng)該沒(méi)什么問(wèn)題了。我們掌握了Maven工具的基本使用之后,其實(shí)對(duì)于一些簡(jiǎn)單的項(xiàng)目的構(gòu)建及管理基本上就沒(méi)什么問(wèn)題了。但是如果我們需要開(kāi)發(fā)一些中大型的項(xiàng)目,此時(shí)僅憑我們前面所學(xué)習(xí)的Maven的基礎(chǔ)知識(shí)就比較難以應(yīng)對(duì)了。所以我們接下來(lái)還需要學(xué)習(xí)Maven提供的一些高級(jí)的功能,這些功能在構(gòu)建和管理Java項(xiàng)目的時(shí)候用的也是非常多的。Maven高級(jí)內(nèi)容包括:分模塊設(shè)計(jì)與開(kāi)發(fā)繼承與聚合私服1.分模塊設(shè)計(jì)與開(kāi)發(fā) \h1.1介紹 \h所謂分模塊設(shè)計(jì),顧名思義指的就是我們?cè)谠O(shè)計(jì)一個(gè)Java項(xiàng)目的時(shí)候,將一個(gè)Java項(xiàng)目拆分成多個(gè)模塊進(jìn)行開(kāi)發(fā)。1).未分模塊設(shè)計(jì)的問(wèn)題如果項(xiàng)目不分模塊,也就意味著所有的業(yè)務(wù)代碼是不是都寫(xiě)在這一個(gè)Java項(xiàng)目當(dāng)中。隨著這個(gè)項(xiàng)目的業(yè)務(wù)擴(kuò)張,項(xiàng)目當(dāng)中的業(yè)務(wù)功能可能會(huì)越來(lái)越多。假如我們開(kāi)發(fā)的是一個(gè)大型的電商項(xiàng)目,里面可能就包括了商品模塊的功能、搜索模塊的功能、購(gòu)物車(chē)模塊、訂單模塊、用戶(hù)中心等等。這些所有的業(yè)務(wù)代碼我們都在一個(gè)Java項(xiàng)目當(dāng)中編寫(xiě)。此時(shí)大家可以試想一下,假如我們開(kāi)發(fā)的是一個(gè)大型的電商網(wǎng)站,這個(gè)項(xiàng)目組至少幾十號(hào)甚至幾百號(hào)開(kāi)發(fā)人員,這些開(kāi)發(fā)人員全部操作這一個(gè)Java項(xiàng)目。此時(shí)大家就會(huì)發(fā)現(xiàn)我們項(xiàng)目管理和維護(hù)起來(lái)將會(huì)非常的困難。而且大家再來(lái)看,假如在我們的項(xiàng)目當(dāng)中,我們自己定義了一些通用的工具類(lèi)以及通用的組件,而公司還有其他的項(xiàng)目組,其他項(xiàng)目組也想使用我們所封裝的這些組件和工具類(lèi),其實(shí)是非常不方便的。因?yàn)镴ava項(xiàng)目當(dāng)中包含了當(dāng)前項(xiàng)目的所有業(yè)務(wù)代碼,所以就造成了這里面所封裝的一些組件會(huì)難以復(fù)用。總結(jié)起來(lái),主要兩點(diǎn)問(wèn)題:不方便項(xiàng)目的維護(hù)和管理、項(xiàng)目中的通用組件難以復(fù)用。2).分模塊設(shè)計(jì)分模塊設(shè)計(jì)我們?cè)谶M(jìn)行項(xiàng)目設(shè)計(jì)階段,就可以將一個(gè)大的項(xiàng)目拆分成若干個(gè)模塊,每一個(gè)模塊都是獨(dú)立的。比如我們可以將商品的相關(guān)功能放在商品模塊當(dāng)中,搜索的相關(guān)業(yè)務(wù)功能我都封裝在搜索模塊當(dāng)中,還有像購(gòu)物車(chē)模塊、訂單模塊。而為了組件的復(fù)用,我們也可以將項(xiàng)目當(dāng)中的實(shí)體類(lèi)、工具類(lèi)以及我們定義的通用的組件都單獨(dú)的抽取到一個(gè)模塊當(dāng)中。如果當(dāng)前這個(gè)模塊,比如訂單模塊需要用到這些實(shí)體類(lèi)以及工具類(lèi)或者這些通用組件,此時(shí)直接在訂單模塊當(dāng)中引入工具類(lèi)的坐標(biāo)就可以了。這樣我們就將一個(gè)項(xiàng)目拆分成了若干個(gè)模塊兒,這就是分模塊兒設(shè)計(jì)。分模塊兒設(shè)計(jì)之后,大家再來(lái)看。我們?cè)谶M(jìn)行項(xiàng)目管理的時(shí)候,我就可以幾個(gè)人一組,幾個(gè)人來(lái)負(fù)責(zé)訂單模塊兒,另外幾個(gè)人來(lái)負(fù)責(zé)購(gòu)物車(chē)模塊兒,這樣更加便于項(xiàng)目的管理以及項(xiàng)目的后期維護(hù)。而且分模塊設(shè)計(jì)之后,如果我們需要用到另外一個(gè)模塊的功能,我們直接依賴(lài)模塊就可以了。比如商品模塊、搜索模塊、購(gòu)物車(chē)訂單模塊都需要依賴(lài)于通用組件當(dāng)中封裝的一些工具類(lèi),我只需要引入通用組件的坐標(biāo)就可以了。分模塊設(shè)計(jì)就是將項(xiàng)目按照功能/結(jié)構(gòu)拆分成若干個(gè)子模塊,方便項(xiàng)目的管理維護(hù)、拓展,也方便模塊鍵的相互調(diào)用、資源共享。1.2實(shí)踐 \h1.2.1分析 \h好,我們明白了什么是分模塊設(shè)計(jì)以及分模塊設(shè)計(jì)的優(yōu)勢(shì)之后,接下來(lái)我們就來(lái)看一下我們之前所開(kāi)發(fā)的案例工程。我們可以看到在這個(gè)項(xiàng)目當(dāng)中,除了我們所開(kāi)發(fā)的部門(mén)管理以及員工管理、登錄認(rèn)證等相關(guān)業(yè)務(wù)功能以外,我們是不是也定義了一些實(shí)體類(lèi),也就是pojo包下存放的一些類(lèi),像分頁(yè)結(jié)果的封裝類(lèi)PageBean、統(tǒng)一響應(yīng)結(jié)果Result,我們還定義了一些通用的工具類(lèi),像Jwts、阿里云OSS操作的工具類(lèi)等等。如果在當(dāng)前公司的其他項(xiàng)目組當(dāng)中,也想使用我們所封裝的這些公共的組件,該怎么辦?大家可以思考一下。方案一:直接依賴(lài)我們當(dāng)前項(xiàng)目tlias-web-management,但是存在兩大缺點(diǎn):這個(gè)項(xiàng)目當(dāng)中包含所有的業(yè)務(wù)功能代碼,而想共享的資源,僅僅是pojo下的實(shí)體類(lèi),以及utils下的工具類(lèi)。如果全部都依賴(lài)進(jìn)來(lái),項(xiàng)目在啟動(dòng)時(shí)將會(huì)把所有的類(lèi)都加載進(jìn)來(lái),會(huì)影響性能。如果直接把這個(gè)項(xiàng)目都依賴(lài)進(jìn)來(lái)了,那也就意味著我們所有的業(yè)務(wù)代碼都對(duì)外公開(kāi)了,這個(gè)是非常不安全的。方案二:分模塊設(shè)計(jì)將pojo包下的實(shí)體類(lèi),抽取到一個(gè)maven模塊中tlias-pojo將utils包下的工具類(lèi),抽取到一個(gè)maven模塊中tlias-utils其他的業(yè)務(wù)代碼,放在tlias-web-management這個(gè)模塊中,在該模塊中需要用到實(shí)體類(lèi)pojo、工具類(lèi)utils,直接引入對(duì)應(yīng)的依賴(lài)即可。注意:分模塊開(kāi)發(fā)需要先針對(duì)模塊功能進(jìn)行設(shè)計(jì),再進(jìn)行編碼。不會(huì)先將工程開(kāi)發(fā)完畢,然后進(jìn)行拆分。PS:當(dāng)前我們是為了演示分模塊開(kāi)發(fā),所以是基于我們前面開(kāi)發(fā)的案例項(xiàng)目進(jìn)行拆分的,實(shí)際中都是分模塊設(shè)計(jì),然后再開(kāi)發(fā)的。1.2.2實(shí)現(xiàn) \h思路我們分析完畢,接下來(lái),我們就根據(jù)我們分析的思路,按照如下模塊進(jìn)行拆分:1.創(chuàng)建maven模塊tlias-pojo,存放實(shí)體類(lèi)創(chuàng)建一個(gè)正常的Maven模塊,模塊名tlias-pojo

然后在tlias-pojo中創(chuàng)建一個(gè)包c(diǎn)om.itheima.pojo(和原來(lái)案例項(xiàng)目中的pojo包名一致)將原來(lái)案例項(xiàng)目tlias-web-management中的pojo包下的實(shí)體類(lèi),復(fù)制到tlias-pojo模塊中在tlias-pojo模塊的pom.xml文件中引入依賴(lài)<dependencies><dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>刪除原有案例項(xiàng)目tlias-web-management的pojo包【直接刪除不要猶豫,我們已經(jīng)將該模塊拆分出去了】,然后在pom.xml中引入tlias-pojo的依賴(lài)<dependency><groupId>com.itheima</groupId><artifactId>tlias-pojo</artifactId><version>1.0-SNAPSHOT</version></dependency>2.創(chuàng)建Maven模塊tlias-utils,存放相關(guān)工具類(lèi)創(chuàng)建一個(gè)正常的Maven模塊,模塊名tlias-utils

然后在tlias-utils中創(chuàng)建一個(gè)包c(diǎn)om.itheima.utils(和原來(lái)案例項(xiàng)目中的utils包名一致)將原來(lái)案例項(xiàng)目tlias-web-management中的utils包下的實(shí)體類(lèi),復(fù)制到tlias-utils模塊中在tlias-utils模塊的pom.xml文件中引入依賴(lài)<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><!--nomorethan2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version></dependency><!--WEB開(kāi)發(fā)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.7.5</version></dependency><dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>E.刪除原有案例項(xiàng)目tlias-web-management的utils包【直接刪除不要猶豫,我們已經(jīng)將該模塊拆分出去了】,然后在pom.xml中引入tlias-utils的依賴(lài)<dependency><groupId>com.itheima</groupId><artifactId>tlias-utils</artifactId><version>1.0-SNAPSHOT</version></dependency>到此呢,就已經(jīng)完成了模塊的拆分,拆分出了tlias-pojo、tlias-utils、tlias-webmanagement,如果其他項(xiàng)目中需要用到pojo,或者utils工具類(lèi),就可以直接引入依賴(lài)。1.3總結(jié) \h1).什么是分模塊設(shè)計(jì):將項(xiàng)目按照功能拆分成若干個(gè)子模塊2).為什么要分模塊設(shè)計(jì):方便項(xiàng)目的管理維護(hù)、擴(kuò)展,也方便模塊間的相互調(diào)用,資源共享3).注意事項(xiàng):分模塊設(shè)計(jì)需要先針對(duì)模塊功能進(jìn)行設(shè)計(jì),再進(jìn)行編碼。不會(huì)先將工程開(kāi)發(fā)完畢,然后進(jìn)行拆分2.繼承與聚合 \h在案例項(xiàng)目分模塊開(kāi)發(fā)之后啊,我們會(huì)看到tlias-pojo、tlias-utils、tlias-web-management中都引入了一個(gè)依賴(lài)lombok的依賴(lài)。我們?cè)谌齻€(gè)模塊中分別配置了一次。如果是做一個(gè)大型的項(xiàng)目,這三個(gè)模塊當(dāng)中重復(fù)的依賴(lài)可能會(huì)很多很多。如果每一個(gè)Maven模塊里面,我們都來(lái)單獨(dú)的配置一次,功能雖然能實(shí)現(xiàn),但是配置是比較繁瑣的。而接下來(lái)我們要講解的Maven的繼承用來(lái)解決這問(wèn)題的。2.1繼承 \h我們可以再創(chuàng)建一個(gè)父工程tlias-parent,然后讓上述的三個(gè)模塊tlias-pojo、tlias-utils、tlias-web-management都來(lái)繼承這個(gè)父工程。然后再將各個(gè)模塊中都共有的依賴(lài),都提取到父工程tlias-parent中進(jìn)行配置,只要子工程繼承了父工程,依賴(lài)它也會(huì)繼承下來(lái),這樣就無(wú)需在各個(gè)子工程中進(jìn)行配置了。概念:繼承描述的是兩個(gè)工程間的關(guān)系,與java中的繼承相似,子工程可以繼承父工程中的配置信息,常見(jiàn)于依賴(lài)關(guān)系的繼承。作用:簡(jiǎn)化依賴(lài)配置、統(tǒng)一管理依賴(lài)實(shí)現(xiàn):<parent><groupId>...</groupId><artifactId>...</artifactId><version>...</version><relativePath></relativePath></parent>這是我們?cè)谶@里先介紹一下什么是繼承以及繼承的作用,以及在maven當(dāng)中如何來(lái)實(shí)現(xiàn)這層繼承關(guān)系。接下來(lái)我們就來(lái)創(chuàng)建這樣一個(gè)parent父工程,我們就可以將各個(gè)子工程當(dāng)中共有的這部分依賴(lài)統(tǒng)一的定義在父工程parent當(dāng)中,從而來(lái)簡(jiǎn)化子工程的依賴(lài)配置。接下來(lái)我們來(lái)看一下具體的操作步驟。我們?cè)谶@里先介紹一下什么是繼承以及繼承的作用,以及在maven當(dāng)中如何來(lái)實(shí)現(xiàn)這層繼承關(guān)系。接下來(lái)我們就來(lái)創(chuàng)建這樣一個(gè)parent父工程,我們就可以將各個(gè)子工程當(dāng)中共有的這部分依賴(lài),統(tǒng)一的定義在父工程parent當(dāng)中,從而來(lái)簡(jiǎn)化子工程的依賴(lài)配置。2.1.1繼承關(guān)系 \h思路分析 \h我們當(dāng)前的項(xiàng)目tlias-web-management,還稍微有一點(diǎn)特殊,因?yàn)槭且粋€(gè)springboot項(xiàng)目,而所有的springboot項(xiàng)目都有一個(gè)統(tǒng)一的父工程,就是spring-boot-starter-parent。與java語(yǔ)言類(lèi)似,Maven不支持多繼承,一個(gè)maven項(xiàng)目只能繼承一個(gè)父工程,如果繼承了spring-boot-starter-parent,就沒(méi)法繼承我們自己定義的父工程tlias-parent了。那我們?cè)趺磥?lái)解決這個(gè)問(wèn)題呢?那此時(shí),大家可以想一下,Java雖然不支持多繼承,但是可以支持多重繼承,比如:A繼承B,B繼承C。那在Maven中也是支持多重繼承的,所以呢,我們就可以讓我們自己創(chuàng)建的三個(gè)模塊,都繼承tlias-parent,而tlias-parent再繼承spring-boot-starter-parent,就可以了。具體結(jié)構(gòu)如下:實(shí)現(xiàn) \h1).創(chuàng)建maven模塊tlias-parent,該工程為父工程,設(shè)置打包方式pom(默認(rèn)jar)。工程結(jié)構(gòu)如下:父工程tlias-parent的pom.xml文件配置如下:<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/><!--lookupparentfromrepository--></parent><groupId>com.itheima</groupId><artifactId>tlias-parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging>Maven打包方式:jar:普通模塊打包,springboot項(xiàng)目基本都是jar包(內(nèi)嵌tomcat運(yùn)行)war:普通web程序打包,需要部署在外部的tomcat服務(wù)器中運(yùn)行pom:父工程或聚合工程,該模塊不寫(xiě)代碼,僅進(jìn)行依賴(lài)管理2).在子工程的pom.xml文件中,配置繼承關(guān)系。<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>這里是以tlias-utils為例,指定了其父工程。其他的模塊,都是相同的配置方式。注意:在子工程中,配置了繼承關(guān)系之后,坐標(biāo)中的groupId是可以省略的,因?yàn)闀?huì)自動(dòng)繼承父工程的。relativePath指定父工程的pom文件的相對(duì)位置(如果不指定,將從本地倉(cāng)庫(kù)/遠(yuǎn)程倉(cāng)庫(kù)查找該工程)。注意:../代表的上一級(jí)目錄3).在父工程中配置各個(gè)工程共有的依賴(lài)(子工程會(huì)自動(dòng)繼承父工程的依賴(lài))。<dependencies><dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency></dependencies>此時(shí),我們已經(jīng)將各個(gè)子工程中共有的依賴(lài)(lombok),都定義在了父工程中,子工程中的這一項(xiàng)依賴(lài),就可以直接刪除了。刪除之后,我們會(huì)看到父工程中配置的依賴(lài)lombok,子工程直接繼承下來(lái)了。工程結(jié)構(gòu)說(shuō)明:我們當(dāng)前的項(xiàng)目結(jié)構(gòu)為:工程結(jié)構(gòu)說(shuō)明:我們當(dāng)前的項(xiàng)目結(jié)構(gòu)為:因?yàn)槲覀兪琼?xiàng)目開(kāi)發(fā)完畢之后,給大家基于現(xiàn)有項(xiàng)目拆分的各個(gè)模塊,tlias-web-management已經(jīng)存在了,然后再創(chuàng)建各個(gè)模塊與父工程,所以父工程與模塊之間是平級(jí)的。而實(shí)際項(xiàng)目中,可能還會(huì)見(jiàn)到下面的工程結(jié)構(gòu):而在真實(shí)的企業(yè)開(kāi)發(fā)中,都是先設(shè)計(jì)好模塊之后,再開(kāi)始創(chuàng)建模塊,開(kāi)發(fā)項(xiàng)目。那此時(shí)呢,一般都會(huì)先創(chuàng)建父工程tlias-parent,然后將創(chuàng)建的各個(gè)子模塊,都放在父工程parent下面。這樣層級(jí)結(jié)構(gòu)會(huì)更加清晰一些。PS:上面兩種工程結(jié)構(gòu),都是可以正常使用的,沒(méi)有一點(diǎn)問(wèn)題。只不過(guò),第二種結(jié)構(gòu),看起來(lái),父子工程結(jié)構(gòu)更加清晰、更加直觀。2.1.2版本鎖定 \h場(chǎng)景 \h如果項(xiàng)目中各個(gè)模塊中都公共的這部分依賴(lài),我們可以直接定義在父工程中,從而簡(jiǎn)化子工程的配置。然而在項(xiàng)目開(kāi)發(fā)中,還有一部分依賴(lài),并不是各個(gè)模塊都共有的,可能只是其中的一小部分模塊中使用到了這個(gè)依賴(lài)。比如:在tlias-web-management、tlias-web-system、tlias-web-report這三個(gè)子工程中,都使用到了jwt的依賴(lài)。但是tlias-pojo、tlias-utils中并不需要這個(gè)依賴(lài),那此時(shí),這個(gè)依賴(lài),我們不會(huì)直接配置在父工程tlias-parent中,而是哪個(gè)模塊需要,就在哪個(gè)模塊中配置。而由于是一個(gè)項(xiàng)目中的多個(gè)模塊,那多個(gè)模塊中,我們要使用的同一個(gè)依賴(lài)的版本要一致,這樣便于項(xiàng)目依賴(lài)的統(tǒng)一管理。比如:這個(gè)jwt依賴(lài),我們都使用的是0.9.1這個(gè)版本。那假如說(shuō),我們項(xiàng)目要升級(jí),要使用到j(luò)wt最新版本0.9.2中的一個(gè)新功能,那此時(shí)需要將依賴(lài)的版本升級(jí)到0.9.2,那此時(shí)該怎么做呢?第一步:去找當(dāng)前項(xiàng)目中所有的模塊的pom.xml配置文件,看哪些模塊用到了jwt的依賴(lài)。第二步:找到這個(gè)依賴(lài)之后,將其版本version,更換為0.9.2。問(wèn)題:如果項(xiàng)目拆分的模塊比較多,每一次更換版本,我們都得找到這個(gè)項(xiàng)目中的每一個(gè)模塊,一個(gè)一個(gè)的更改。很容易就會(huì)出現(xiàn),遺漏掉一個(gè)模塊,忘記更換版本的情況。那我們又該如何來(lái)解決這個(gè)問(wèn)題,如何來(lái)統(tǒng)一管理各個(gè)依賴(lài)的版本呢?答案:Maven的版本鎖定功能。介紹 \h在maven中,可以在父工程的pom文件中通過(guò)<dependencyManagement>來(lái)統(tǒng)一管理依賴(lài)版本。父工程:<!--統(tǒng)一管理依賴(lài)版本--><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>只能統(tǒng)一管理依賴(lài)版本,并不會(huì)將這個(gè)依賴(lài)直接引入進(jìn)來(lái)。這點(diǎn)和<dependencies>是不同的。子工程要使用這個(gè)依賴(lài),還是需要引入的,只是此時(shí)就無(wú)需指定<version>版本號(hào)了,父工程統(tǒng)一管理。變更依賴(lài)版本,只需在父工程中統(tǒng)一變更。注意:實(shí)現(xiàn) \h接下來(lái),我們就可以將tlias-utils模塊中單獨(dú)配置的依賴(lài),將其版本統(tǒng)一交給tlias-parent進(jìn)行統(tǒng)一管理。具體步驟如下:1).tlias-parent中的配置<!--統(tǒng)一管理依賴(lài)版本--><dependencyManagement><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><!--nomorethan2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version></dependency></dependencies></dependencyManagement>2).tlias-utils中的pom.xml配置如果依賴(lài)的版本已經(jīng)在父工程進(jìn)行了統(tǒng)一管理,所以在子工程中就無(wú)需再配置依賴(lài)的版本了。<dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency><!--阿里云OSS--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId></dependency><!--nomorethan2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId></dependency><!--WEB開(kāi)發(fā)--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>我們之所以,在springboot項(xiàng)目中很多時(shí)候,引入依賴(lài)坐標(biāo),都不需要指定依賴(lài)的版本<version>,是因?yàn)樵诟腹こ蘳pring-boot-starter-parent中已經(jīng)通過(guò)<dependencyManagement>對(duì)依賴(lài)的版本進(jìn)行了統(tǒng)一的管理維護(hù)。屬性配置 \h我們也可以通過(guò)自定義屬性及屬性引用的形式,在父工程中將依賴(lài)的版本號(hào)進(jìn)行集中管理維護(hù)。具體語(yǔ)法為:1).自定義屬性<properties><lombok.version>1.18.24</lombok.version></properties>2).引用屬性<dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency>接下來(lái),我們就可以在父工程中,將所有的版本號(hào),都集中管理維護(hù)起來(lái)。<properties><piler.source>11</piler.source><piler.target>11</piler.target><lombok.version>1.18.24</lombok.version><jjwt.version>0.9.1</jjwt.version><aliyun.oss.version>3.15.1</aliyun.oss.version><jaxb.version>2.3.1</jaxb.version><activation.version>1.1.1</activation.version><jaxb.runtime.version>2.3.3</jaxb.runtime.version></properties><dependencies><dependency><groupId>jectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency></dependencies><!--統(tǒng)一管理依賴(lài)版本--><dependencyManagement><dependencies><!--JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt.version}</version></dependency><!--阿里云OSS--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.oss.version}</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>${jaxb.version}</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>${activation.version}</version></dependency><!--nomorethan2.3.3--><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>${jaxb.runtime.version}</version></dependency></dependencies></dependencyManagement>版本集中管理之后,我們要想修改依賴(lài)的版本,就只需要在父工程中自定義屬性的位置,修改對(duì)應(yīng)的屬性值即可。面試題:<dependencyManagement>與<dependencies>的區(qū)別是什么?<dependencies>是直接依賴(lài),在父工程配置了依賴(lài),子工程會(huì)直接繼承下來(lái)。<dependencyManagement>是統(tǒng)一管理依賴(lài)版本,不會(huì)直接依賴(lài),還需要在子工程中引入所需依賴(lài)(無(wú)需指定版本)2.2聚合 \h分模塊設(shè)計(jì)與開(kāi)發(fā)之后啊,我們的項(xiàng)目被拆分為多個(gè)模塊,而模塊之間的關(guān)系,可能錯(cuò)綜復(fù)雜。那就比如我們當(dāng)前的案例項(xiàng)目,結(jié)構(gòu)如下(相對(duì)還是比較簡(jiǎn)單的):此時(shí),tlias-web-management模塊的父工程是tlias-parent,該模塊又依賴(lài)了tlias-pojo、tlias-utils模塊。那此時(shí),我們要想將tlias-web-management模塊打包,是比較繁瑣的。因?yàn)樵谶M(jìn)行項(xiàng)目打包時(shí),maven會(huì)從本地倉(cāng)庫(kù)中來(lái)查找tlias-parent父工程,以及它所依賴(lài)的模塊tlias-pojo、tlias-utils,而本地倉(cāng)庫(kù)目前是沒(méi)有這幾個(gè)依賴(lài)的。所以,我們?cè)俅虬黷lias-web-management模塊前,需要將tlias-parent、tlias-pojo、tliasutils分別執(zhí)行install生命周期安裝到maven的本地倉(cāng)庫(kù),然后再針對(duì)于tlias-webmanagement模塊執(zhí)行package進(jìn)行打包操作。那此時(shí),大家試想一下,如果開(kāi)發(fā)一個(gè)大型項(xiàng)目,拆分的模塊很多,模塊之間的依賴(lài)關(guān)系錯(cuò)綜復(fù)雜,那此時(shí)要進(jìn)行項(xiàng)目的打包、安裝操作,是非常繁瑣的。而我們接下來(lái),要講解的maven的聚合就是來(lái)解決這個(gè)問(wèn)題的,通過(guò)maven的聚合就可以輕松實(shí)現(xiàn)項(xiàng)目的一鍵構(gòu)建(清理、編譯、測(cè)試、打包、安裝等)。2.2.1介紹 \h聚合:將多個(gè)模塊組織成一個(gè)整體,同時(shí)進(jìn)行項(xiàng)目的構(gòu)建。聚合工程:一個(gè)不具有業(yè)務(wù)功能的“空”工程(有且僅有一個(gè)pom文件)【PS:一般來(lái)說(shuō),繼承關(guān)系中的父工程與聚合關(guān)系中的聚合工程是同一個(gè)】作用:快速構(gòu)建項(xiàng)目(無(wú)需根據(jù)依賴(lài)關(guān)系手動(dòng)構(gòu)建,直接在聚合工程上構(gòu)建即可)2.2.2實(shí)現(xiàn) \h在maven中,我們可以在聚合工程中通過(guò)<moudules>設(shè)置當(dāng)前聚合工程所包含的子模塊的名稱(chēng)。我們可以在tlias-parent中,添加如下配置,來(lái)指定當(dāng)前聚合工程,需要聚合的模塊:<!--聚合其他模塊--><modules><module>../tlias-pojo</module><module>../tlias-utils</module><module>../tlias-web-management</module></modules>那此時(shí),我們要進(jìn)行編譯、打包、安裝操作,就無(wú)需在每一個(gè)模塊上操作了。只需要在聚合工程上,統(tǒng)一進(jìn)行操作就可以了。測(cè)試:執(zhí)行在聚合工程tlias-parent中執(zhí)行package打包指令那tlias-parent中所聚合的其他模塊全部都會(huì)執(zhí)行package指令,這就是通過(guò)聚合實(shí)現(xiàn)項(xiàng)目的一鍵構(gòu)建(一鍵清理clean、一鍵編譯compile、一鍵測(cè)試test、一鍵打包package、一鍵安裝install等)。2.3繼承與聚合對(duì)比 \h作用聚合用于快速構(gòu)建項(xiàng)目繼承用于簡(jiǎn)化依賴(lài)配置、統(tǒng)一管理依賴(lài)相同點(diǎn):聚合與繼承的pom.xml文件打包方式均為pom,通常將兩種關(guān)系制作到同一個(gè)pom文件中聚合與繼承均屬于設(shè)計(jì)型模塊,并無(wú)實(shí)際的模塊內(nèi)容不同點(diǎn):聚合是在聚合工程中配置關(guān)系,聚合可以感知到參與聚合的模塊有哪些繼承是在子模塊中配置關(guān)系,父模塊無(wú)法感知哪些子模塊繼承了自己3.私服 \h前面我們?cè)谥v解多模塊開(kāi)發(fā)的時(shí)候,我們講到我們所拆分的模塊是可以在同一個(gè)公司各個(gè)項(xiàng)目組之間進(jìn)行資源共享的。這個(gè)模塊的資源共享,就需要通過(guò)我們接下來(lái)所講解的Maven的私服來(lái)實(shí)現(xiàn)。首先我們先介紹一下什么是私服,以及它的作用是什么。再來(lái)介紹一下我們?nèi)绾螌⒚课荒K打包上傳到私服,以及從私服當(dāng)中來(lái)下載。3.1場(chǎng)景 \h在介紹什么是私服之前,我們先來(lái)分析一下同一個(gè)公司,兩個(gè)項(xiàng)目組之間如何基于私服進(jìn)行資源的共享。假設(shè)現(xiàn)在有兩個(gè)團(tuán)隊(duì),A和B。A開(kāi)發(fā)了一個(gè)模塊tlias-utils,模塊開(kāi)發(fā)完畢之后,將模塊打成jar包,并安裝到了A的本地倉(cāng)庫(kù)。那此時(shí),該公司的B團(tuán)隊(duì)開(kāi)發(fā)項(xiàng)目時(shí),要想使用tlias-utils中提供的工具類(lèi),該怎么辦呢?對(duì)于maven項(xiàng)目來(lái)說(shuō),是不是在pom.xml文件中引入tlias-utils的坐標(biāo)就可以了呢?大家可以思考一下,當(dāng)B團(tuán)隊(duì)在maven項(xiàng)目的pom.xml配置文件中引入了依賴(lài)的坐標(biāo)之后,maven是如何查找這個(gè)依賴(lài)的?查找順序?yàn)椋?).本地倉(cāng)庫(kù):本地倉(cāng)庫(kù)中是沒(méi)有這個(gè)依賴(lài)jar包的。2).遠(yuǎn)程中央倉(cāng)庫(kù):由于該模塊時(shí)自己公司開(kāi)發(fā)的,遠(yuǎn)程倉(cāng)庫(kù)中也沒(méi)有這個(gè)依賴(lài)。因?yàn)槟壳皌lias-utils這個(gè)依賴(lài),還在A的本地倉(cāng)庫(kù)中的。B電腦上的maven項(xiàng)目,是不可能找得到A電腦上maven本地倉(cāng)庫(kù)的jar包的。那此時(shí),大家可能會(huì)有一個(gè)想法:因?yàn)锳和B都會(huì)連接中央倉(cāng)庫(kù),我們可以將A本地倉(cāng)庫(kù)的jar包,直接上傳到中央倉(cāng)庫(kù),然后B從中央倉(cāng)庫(kù)中下載tlias-utils這個(gè)依賴(lài)。這個(gè)想法很美好,但是現(xiàn)實(shí)很殘酷。這個(gè)方案是行不通的,因?yàn)橹醒雮}(cāng)庫(kù)全球只有一個(gè),不是什么人都可以往中央倉(cāng)庫(kù)中來(lái)上傳jar包的,我們是沒(méi)有權(quán)限操作的。那此時(shí),maven的私服就出場(chǎng)了,私服其實(shí)就是架設(shè)在公司局域網(wǎng)內(nèi)部的一臺(tái)服務(wù)器,就是一種特殊的遠(yuǎn)程倉(cāng)庫(kù)。有了私服之后,各個(gè)團(tuán)隊(duì)就可以直接來(lái)連接私服了。A連接上私服之后,他就可以把jar包直接上傳到私服當(dāng)中。我公司自己內(nèi)部搭建的服務(wù)器,我是不是有權(quán)限操作呀,把jar包上傳到私服之后,我讓B團(tuán)隊(duì)的所有開(kāi)發(fā)人員也連接同一臺(tái)私服。連接上這一臺(tái)私服之后,他就會(huì)根據(jù)坐標(biāo)的信息,直接從私服當(dāng)中將對(duì)應(yīng)的jar包下載到自己的本地倉(cāng)庫(kù),這樣就可以使用到依賴(lài)當(dāng)中所提供的一些工具類(lèi)了。這樣我們就可以通過(guò)私服來(lái)完成資源的共享。而如果我們?cè)陧?xiàng)目中需要使用其他第三方提供的依賴(lài),如果本地倉(cāng)庫(kù)沒(méi)有,也會(huì)自動(dòng)連接私服下載,如果私服沒(méi)有,私服此時(shí)會(huì)自動(dòng)連接中央倉(cāng)庫(kù),去中央倉(cāng)庫(kù)中下載依賴(lài),然后將下載的依賴(lài)存儲(chǔ)在私服倉(cāng)庫(kù)及本地倉(cāng)庫(kù)中。3.2介紹 \h私服:是一種特殊的遠(yuǎn)程倉(cāng)庫(kù),它是架設(shè)在局域網(wǎng)內(nèi)的倉(cāng)庫(kù)服務(wù),用來(lái)代理位于外部的中央倉(cāng)庫(kù),用于解決團(tuán)隊(duì)內(nèi)部的資源共享與資源同步問(wèn)題。依賴(lài)查找順序:本地倉(cāng)庫(kù)私服倉(cāng)庫(kù)中央倉(cāng)庫(kù)注意事項(xiàng):私服在企業(yè)項(xiàng)目開(kāi)發(fā)中,一個(gè)項(xiàng)目/公司,只需要一臺(tái)即可(無(wú)需我們自己搭建,會(huì)使用即可)。3.3資源上傳與下載 \h3.3.1步驟分析 \h資源上傳與下載,我們需要做三步配置,執(zhí)行一條指令。第一步配置:在maven的配置文件中配置訪問(wèn)私服的用戶(hù)名、密碼。第二步配置:在maven的配置文件中配置連接私服的地址(url地址)。第三步配置:在項(xiàng)目的pom.xml文件中配置上傳資源的位置(url地址)。配置好了上述三步之后,要上傳資源到私服倉(cāng)庫(kù),就執(zhí)行執(zhí)行maven生命周期:deploy。私服倉(cāng)庫(kù)說(shuō)明:RELEASE:存儲(chǔ)自己開(kāi)發(fā)的RELEASE發(fā)布版本的資源。SNAPSHOT:存儲(chǔ)自己開(kāi)發(fā)的SNAPSHOT發(fā)布版本的資源。Central:存儲(chǔ)的是從中央倉(cāng)庫(kù)下載下來(lái)的依賴(lài)。項(xiàng)目版本說(shuō)明:RELEASE(發(fā)布版本):功能趨于穩(wěn)定、當(dāng)前更新停止,可以用于發(fā)行的版本,存儲(chǔ)在私服中的RELEASE倉(cāng)庫(kù)中。SNAPSHOT(快照版本):功能不穩(wěn)定、尚處于開(kāi)發(fā)中的版本,即快照版本,存儲(chǔ)在私服的SNAPSHOT倉(cāng)庫(kù)中。3.3.2具體操作 \h為了模擬企業(yè)開(kāi)發(fā),這里我準(zhǔn)備好了一臺(tái)服務(wù)器(01),私服已經(jīng)搭建好了,我們可以訪問(wèn)私服測(cè)試:\h01:8081私服準(zhǔn)備好了之后,我們要做如下幾步配置:1.設(shè)置私服的訪問(wèn)用戶(hù)名/密碼(在自己maven安裝目錄下的conf/settings.xml中的servers中配置)<server><id>maven-releases</id><username>admin</username><password>admin</password></server><server><id>maven-snapshots</id><username>admin</username><password>a

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論