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