java maven進(jìn)階教學(xué)
1 Maven依賴范圍
1.1 依賴配置
<project>
...
<dependencies>
<denpendcy>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope></scope>
<optional></optional>
<exclusions>
<exclusion>
...
</exclusion>
</exclusions>
</denpendcy>
</dependencies>
</project>
在pom.xml文件中,根元素project下的dependencies標(biāo)簽中可以包含一個或者多個dependency元素,以聲明一個或者多個項目依賴。每個依賴dependency標(biāo)簽中都應(yīng)該包含以下元素。
groupId: 依賴組id,可以理解為java的包名,一般用域名倒寫
artifactId: 可以理解為項目名或者依賴名
version:依賴的版本
type:依賴的類型,對應(yīng)項目坐標(biāo)定義的packaging,大部分情況下,該屬性不必聲明,其默認(rèn)值為jar
scope:依賴的范圍,這個對應(yīng)的屬性就比較多了,后續(xù)會做詳細(xì)介紹
optional:標(biāo)記依賴是否可選
exclusions:用來排除依賴的傳遞性,其中可以配置多個exclusion屬性,每個標(biāo)簽對應(yīng)著groupId、artifactId、version等三個基本屬性
很多時候,大部分依賴聲明只包含groupId、artifactId和version這三個指定基本坐標(biāo)的元素;而在一些特殊情況下,其它元素至關(guān)重要,也就是上面提到的scope、optional和exclusions。
1.2 依賴范圍概念
maven在編譯項目主代碼的時候需要使用一套classpath。舉例來說:

所以,依賴范圍就是用來控制依賴與這三種classpath(編譯classpath、測試classpath、運行classpath)的關(guān)系的。
依賴具體范圍:scope(依賴范圍)共有五種,它們分別是compile、provided、runtime、test、system。

2 pom依賴傳遞性

在maven中,依賴傳遞是可以傳遞的,假設(shè)存在三個項目,分別是項目A,項目B,項目C。假設(shè)C依賴B,B依賴A,那么根據(jù)maven項目依賴的特征不難推出項目C也依賴于項目A.通過上圖也可以看出,在項目中直接依賴了spring-webmvc,而spring-webmvc依賴了Spring-aop,spring-beans等,也就是在項目中有依賴了spring-aop和spring-beans等等

3 依賴沖突解決
在實際的 Maven 項目開發(fā)中,由于項目引入的依賴過多,遇到 jar 沖突算是一個很常見的問題了

·標(biāo)注一:Maven Project,Maven 項目選項;
·標(biāo)注二:Dependencies,項目依賴;
·標(biāo)注三:Show Dependencies,展示項目依賴圖
點擊Show Dependencies 按鈕之后,接下來就會出現(xiàn)以下內(nèi)容。

在我們發(fā)現(xiàn)jar包沖突之后,就可以通過exclusion進(jìn)行沖突的解決
4 分模塊構(gòu)建項目
Maven多模塊項目,適用于一些比較大的項目,通過合理的模塊拆分,實現(xiàn)代碼的復(fù)用,便于維護和管理。尤其是一些開源框架,也是采用多模塊的方式,提供插件集成,用戶可以根據(jù)需要配置指定的模塊
4.1 創(chuàng)建一個父maven工程
1. 新建一個maven項目,選擇存儲位置,并選擇創(chuàng)建一個簡單的maven工程
2.創(chuàng)建第一個模塊
3.創(chuàng)建第二個模塊
4.選擇繼承的父模塊
5.創(chuàng)建聚合工程C
這種項目結(jié)構(gòu)主要應(yīng)用在大型項目中,多人協(xié)作開發(fā),小型項目 或 人員配置不足情況下不建議使用; 之前因為一直沒有機會參與大型項目開發(fā),或是這種分布式項目的搭建,網(wǎng)上也沒有這方面系統(tǒng)全面的說明 ,可能真正用到這種架構(gòu)的不需要自己動手去弄,等著別人搭好進(jìn)去碼代碼就可以了
5 聚合和繼承
Maven的聚合特性可以幫助我們把項目的多個模塊聚合在一起,使用一條命令進(jìn)行構(gòu)建,即一條命令實現(xiàn)構(gòu)建多個項目;
Maven的繼承特性可以將各個模塊相同的依賴和插件配置提取出來,在簡化POM的同時還可以促進(jìn)各個模塊配置的一致性
5.1 聚合
<modules>
<module>spring1</module>
<module>spring2</module>
<module>spring3</module>
</modules>
在前面的學(xué)習(xí)中,我們見過打包方式為jar和war的,但是聚合模塊的打包方式必須為pom,否則無法完成構(gòu)建。
5.2 繼承
<parent> <groupId>com.baidu</groupId> <artifactId>miliao-rootpom</artifactId> <version>2.0.3</version> </parent>
可繼承的POM元素如下:
- groupId:項目組ID,項目坐標(biāo)的核心元素
- version:項目版本,項目坐標(biāo)的核心因素
- distributionManagement:項目的部署配置
- dependencies:項目的依賴配置
- dependencyManagement:項目的依賴管理配置
5.3 聚合和繼承的關(guān)系
雖然聚合模塊和父模塊經(jīng)常合二為一,但是聚合和繼承是兩個不同的概念,其實是沒有什么關(guān)系的。
聚合模塊知道它聚合了哪些模塊,但是被聚合的模塊不知道聚合模塊的存在;
繼承父模塊不知道子模塊的存在,但是子模塊都必須知道自己的父模塊是誰。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java中的export方法實現(xiàn)導(dǎo)出excel文件
這篇文章主要介紹了java中的export方法實現(xiàn)導(dǎo)出excel文件,文章圍繞java導(dǎo)出excel文件的相關(guān)資料展開詳細(xì)內(nèi)容,需要的小伙伴可以參考一下2022-03-03
使用mybatis報Invalid bound statement解決分析
這篇文章主要為大家介紹了使用mybatis報Invalid bound statement原因解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
解決@Scheduled定時器使用@Thransactional事物問題
這篇文章主要介紹了解決@Scheduled定時器使用@Thransactional事物問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
springboot從application.properties中注入list,?map方式
這篇文章主要介紹了springboot從application.properties中注入list,map方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
mybatis+lombok出現(xiàn)java.lang.IndexOutOfBoundsException錯誤及解決
在使用MyBatis和Lombok時,如果遇到j(luò)ava.lang.IndexOutOfBoundsException問題,是因為MyBatis在嘗試將查詢結(jié)果封裝成Java對象時,找不到構(gòu)造函數(shù)中對應(yīng)的字段,這通常是由于Lombok的@Builder注解生成了全參構(gòu)造函數(shù)2025-02-02

