柚子快報(bào)邀請(qǐng)碼778899分享:java maven學(xué)習(xí)筆記
柚子快報(bào)邀請(qǐng)碼778899分享:java maven學(xué)習(xí)筆記
先贊后看,養(yǎng)成習(xí)慣?。?!?? ?? ?? 文章碼字不易,如果喜歡可以關(guān)注我哦! ?如果本篇內(nèi)容對(duì)你有所啟發(fā),歡迎訪問(wèn)我的個(gè)人博客了解更多內(nèi)容:鏈接地址
基礎(chǔ)
maven的作用
項(xiàng)目構(gòu)建:提供標(biāo)準(zhǔn)的,跨平臺(tái)的自動(dòng)化構(gòu)建方式依賴管理:方便快捷的管理項(xiàng)目依賴資源(jar包),避免資源間的版本沖突問(wèn)題統(tǒng)一開(kāi)發(fā)結(jié)構(gòu):提供標(biāo)準(zhǔn)的,統(tǒng)一的項(xiàng)目結(jié)構(gòu)pom
Maven生命周期命令
命令 作用 mvn compile 編譯主程序 src/main ,生成target目錄,存放編譯主程序生成的字節(jié)碼文件,輸出到 target/classes mvn test-compile 編譯測(cè)試程序 src/test ,生成target目錄,存放編譯測(cè)試程序生成的字節(jié)碼文件,輸出到 target/test-classes mvn test 編寫(xiě)的測(cè)試代碼并生成測(cè)試報(bào)告(目前對(duì)于后端開(kāi)發(fā)沒(méi)有太大作用) mvn package 將項(xiàng)目打成jar包 mvn clean 清空項(xiàng)目本地編譯目錄 mvn install 將項(xiàng)目 安裝到本地倉(cāng)庫(kù)(多個(gè)項(xiàng)目相互依賴 相互使用時(shí).)
高級(jí)
分模塊開(kāi)發(fā)設(shè)計(jì)
(1)按照功能拆分
我們現(xiàn)在的項(xiàng)目都是在一個(gè)模塊中,比如前面的SSM整合開(kāi)發(fā)。雖然這樣做功能也都實(shí)現(xiàn)了,但是也存在了一些問(wèn)題,我們拿銀行的項(xiàng)目為例來(lái)聊聊這個(gè)事。
網(wǎng)絡(luò)沒(méi)有那么發(fā)達(dá)的時(shí)候,我們需要到銀行柜臺(tái)或者取款機(jī)進(jìn)行業(yè)務(wù)操作隨著互聯(lián)網(wǎng)的發(fā)展,我們有了電腦以后,就可以在網(wǎng)頁(yè)上登錄銀行網(wǎng)站使用U盾進(jìn)行業(yè)務(wù)操作再來(lái)就是隨著智能手機(jī)的普及,我們只需要用手機(jī)登錄APP就可以進(jìn)行業(yè)務(wù)操作
上面三個(gè)場(chǎng)景出現(xiàn)的時(shí)間是不相同的,如果非要把三個(gè)場(chǎng)景的模塊代碼放入到一個(gè)項(xiàng)目,那么當(dāng)其中某一個(gè)模塊代碼出現(xiàn)問(wèn)題,就會(huì)導(dǎo)致整個(gè)項(xiàng)目無(wú)法正常啟動(dòng),從而導(dǎo)致銀行的多個(gè)業(yè)務(wù)都無(wú)法正常班理。所以我們會(huì)==按照功能==將項(xiàng)目進(jìn)行拆分。
(2)按照模塊拆分
比如電商的項(xiàng)目中,有訂單和商品兩個(gè)模塊,訂單中需要包含商品的詳細(xì)信息,所以需要商品的模型類,商品模塊也會(huì)用到商品的模型類,這個(gè)時(shí)候如果兩個(gè)模塊中都寫(xiě)模型類,就會(huì)出現(xiàn)重復(fù)代碼,后期的維護(hù)成本就比較高。我們就想能不能將它們公共的部分抽取成一個(gè)獨(dú)立的模塊,其他模塊要想使用可以像添加第三方j(luò)ar包依賴一樣來(lái)使用我們自己抽取的模塊,這樣就解決了代碼重復(fù)的問(wèn)題,這種拆分方式就說(shuō)我們所說(shuō)的==按照模塊==拆分。
依賴管理
我們現(xiàn)在已經(jīng)能把項(xiàng)目拆分成一個(gè)個(gè)獨(dú)立的模塊,當(dāng)在其他項(xiàng)目中想要使用獨(dú)立出來(lái)的這些模塊,只需要在其pom.xml使用標(biāo)簽來(lái)進(jìn)行jar包的引入即可。
其實(shí)就是依賴,關(guān)于依賴管理里面都涉及哪些內(nèi)容,我們就一個(gè)個(gè)來(lái)學(xué)習(xí)下:
依賴傳遞可選依賴排除依賴
我們先來(lái)說(shuō)說(shuō)什么是依賴:
依賴指當(dāng)前項(xiàng)目運(yùn)行所需的jar,一個(gè)項(xiàng)目可以設(shè)置多個(gè)依賴。
因?yàn)橛幸蕾噦鬟f的存在,就會(huì)導(dǎo)致jar包在依賴的過(guò)程中出現(xiàn)沖突問(wèn)題,具體什么是沖突?Maven是如何解決沖突的?
這里所說(shuō)的==依賴沖突==是指項(xiàng)目依賴的某一個(gè)jar包,有多個(gè)不同的版本,因而造成類包版本沖突。
特殊優(yōu)先:當(dāng)同級(jí)配置了相同資源的不同版本,后配置的覆蓋先配置的。路徑優(yōu)先:當(dāng)依賴中出現(xiàn)相同的資源時(shí),層級(jí)越深,優(yōu)先級(jí)越低,層級(jí)越淺,優(yōu)先級(jí)越高聲明優(yōu)先:當(dāng)資源在相同層級(jí)被依賴時(shí),配置順序靠前的覆蓋配置順序靠后的
可選依賴
可選依賴指對(duì)外隱藏當(dāng)前所依賴的資源---不透明
例如在maven_04_dao的pom.xml,在引入maven_03_pojo的時(shí)候,添加optional
排除依賴
排除依賴指主動(dòng)斷開(kāi)依賴的資源,被排除的資源無(wú)需指定版本---不需要
......
聚合和繼承
聚合
我們的項(xiàng)目已經(jīng)從以前的單模塊,變成了現(xiàn)在的多模塊開(kāi)發(fā)。項(xiàng)目一旦變成了多模塊開(kāi)發(fā)以后,就會(huì)引發(fā)一些問(wèn)題,在這一節(jié)中我們主要會(huì)學(xué)習(xí)兩個(gè)內(nèi)容聚合和繼承,用這兩個(gè)知識(shí)來(lái)解決下分模塊后的一些問(wèn)題。
==聚合==
所謂聚合:將多個(gè)模塊組織成一個(gè)整體,同時(shí)進(jìn)行項(xiàng)目構(gòu)建的過(guò)程稱為聚合聚合工程:通常是一個(gè)不具有業(yè)務(wù)功能的"空"工程(有且僅有一個(gè)pom文件)作用:使用聚合工程可以將多個(gè)工程編組,通過(guò)對(duì)聚合工程進(jìn)行構(gòu)建,實(shí)現(xiàn)對(duì)所包含的模塊進(jìn)行同步構(gòu)建
當(dāng)工程中某個(gè)模塊發(fā)生更新(變更)時(shí),必須保障工程中與已更新模塊關(guān)聯(lián)的模塊同步更新,此時(shí)可以使用聚合工程來(lái)解決批量模塊同步構(gòu)建的問(wèn)題。
關(guān)于聚合具體的實(shí)現(xiàn)步驟為:
步驟1:創(chuàng)建一個(gè)空的maven項(xiàng)目
步驟2:將項(xiàng)目的打包方式改為pom
說(shuō)明:項(xiàng)目的打包方式,我們接觸到的有三種,分別是
jar:默認(rèn)情況,說(shuō)明該項(xiàng)目為java項(xiàng)目war:說(shuō)明該項(xiàng)目為web項(xiàng)目pom:說(shuō)明該項(xiàng)目為聚合或繼承(后面會(huì)講)項(xiàng)目
步驟3:pom.xml添加所要管理的項(xiàng)目
步驟4:使用聚合統(tǒng)一管理項(xiàng)目
當(dāng)compile被點(diǎn)擊后,所有被其管理的項(xiàng)目都會(huì)被執(zhí)行編譯操作。這就是聚合工程的作用。
說(shuō)明:聚合工程管理的項(xiàng)目在進(jìn)行運(yùn)行的時(shí)候,會(huì)按照項(xiàng)目與項(xiàng)目之間的依賴關(guān)系來(lái)自動(dòng)決定執(zhí)行的順序和配置的順序無(wú)關(guān)。
聚合的知識(shí)我們就講解完了,最后總結(jié)一句話就是,聚合工程主要是用來(lái)管理項(xiàng)目。
繼承
所謂繼承:描述的是兩個(gè)工程間的關(guān)系,與java中的繼承相似,子工程可以繼承父工程中的配置信息,常見(jiàn)于依賴關(guān)系的繼承。作用:
簡(jiǎn)化配置減少版本沖突
步驟1:創(chuàng)建一個(gè)空的Maven項(xiàng)目并將其打包方式設(shè)置為pom
因?yàn)檫@一步和前面maven創(chuàng)建聚合工程的方式是一摸一樣,所以我們可以單獨(dú)創(chuàng)建一個(gè)新的工程,也可以直接和聚合公用一個(gè)工程。實(shí)際開(kāi)發(fā)中,聚合和繼承一般也都放在同一個(gè)項(xiàng)目中,但是這兩個(gè)的功能是不一樣的。
步驟2:在子項(xiàng)目中設(shè)置其父工程
分別在maven_02_ssm,maven_03_pojo,maven_04_dao的pom.xml中添加其父項(xiàng)目為maven_01_parent
步驟3:優(yōu)化子項(xiàng)目共有依賴導(dǎo)入問(wèn)題
將子項(xiàng)目共同使用的jar包都抽取出來(lái),維護(hù)在父項(xiàng)目的pom.xml中
刪除子項(xiàng)目中已經(jīng)被抽取到父項(xiàng)目的pom.xml中的jar包,如在maven_02_ssm的pom.xml中將已經(jīng)出現(xiàn)在父項(xiàng)目的jar包刪除掉
步驟4:優(yōu)化子項(xiàng)目依賴版本問(wèn)題
在父工程mavne_01_parent的pom.xml來(lái)定義依賴管理
將maven_02_ssm的pom.xml中的junit依賴刪除掉,刷新Maven
刷新完會(huì)發(fā)現(xiàn),在maven_02_ssm項(xiàng)目中的junit依賴并沒(méi)有出現(xiàn),所以我們得到一個(gè)結(jié)論:
標(biāo)簽不真正引入jar包,而是配置可供子項(xiàng)目選擇的jar包依賴
子項(xiàng)目要想使用它所提供的這些jar包,需要自己添加依賴,并且不需要指定
在maven_02_ssm的pom.xml添加junit的依賴
注意:這里就不需要添加版本了,這樣做的好處就是當(dāng)父工程dependencyManagement標(biāo)簽中的版本發(fā)生變化后,子項(xiàng)目中的依賴版本也會(huì)跟著發(fā)生變化
總結(jié)來(lái)說(shuō),繼承可以幫助做兩件事
將所有項(xiàng)目公共的jar包依賴提取到父工程的pom.xml中,子項(xiàng)目就可以不用重復(fù)編寫(xiě),簡(jiǎn)化開(kāi)發(fā)將所有項(xiàng)目的jar包配置到父工程的dependencyManagement標(biāo)簽下,實(shí)現(xiàn)版本管理,方便維護(hù)
dependencyManagement標(biāo)簽不真正引入jar包,只是管理jar包的版本子項(xiàng)目在引入的時(shí)候,只需要指定groupId和artifactId,不需要加version當(dāng)dependencyManagement標(biāo)簽中jar包版本發(fā)生變化,所有子項(xiàng)目中有用到該jar包的地方對(duì)應(yīng)的版本會(huì)自動(dòng)隨之更新
最后總結(jié)一句話就是,父工程主要是用來(lái)快速配置依賴jar包和管理項(xiàng)目中所使用的資源。
聚合與繼承的區(qū)別
兩種之間的作用:
聚合用于快速構(gòu)建項(xiàng)目,對(duì)項(xiàng)目進(jìn)行管理繼承用于快速配置和管理子項(xiàng)目中所使用jar包的版本
聚合和繼承的相同點(diǎn):
聚合與繼承的pom.xml文件打包方式均為pom,可以將兩種關(guān)系制作到同一個(gè)pom文件中聚合與繼承均屬于設(shè)計(jì)型模塊,并無(wú)實(shí)際的模塊內(nèi)容
聚合和繼承的不同點(diǎn):
聚合是在當(dāng)前模塊中配置關(guān)系,聚合可以感知到參與聚合的模塊有哪些繼承是在子模塊中配置關(guān)系,父模塊無(wú)法感知哪些子模塊繼承了自己
柚子快報(bào)邀請(qǐng)碼778899分享:java maven學(xué)習(xí)筆記
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。