Maven進(jìn)階使用

1 maven基礎(chǔ)知識回顧

1.1 maven介紹

maven 是一個項目管理工具题造,主要作用是在項目開發(fā)階段對Java項目進(jìn)行依賴管理和項目構(gòu)建游添。
依賴管理:就是對jar包的管理。通過導(dǎo)入maven坐標(biāo)二庵,就相當(dāng)于將倉庫中的jar包導(dǎo)入了當(dāng)前項目中纠拔。
項目構(gòu)建:通過maven的一個命令就可以完成項目從清理、編譯澜汤、測試蚜迅、報告舵匾、打包,部署整個過程谁不。


image.png

1.2 maven的倉庫類型

1.本地倉庫
2.遠(yuǎn)程倉庫
①maven中央倉庫(地址:http://repo2.maven.org/maven2/
②maven私服(公司局域網(wǎng)內(nèi)的倉庫坐梯,需要自己搭建)
③其他公共遠(yuǎn)程倉庫(例如apache提供的遠(yuǎn)程倉庫,地址:
http://repo.maven.apache.org/maven2/
本地倉庫---》maven私服---》maven中央倉庫

1.3 maven常用命令

clean: 清理
compile:編譯
test: 測試
package:打包
install: 安裝

1.4 maven坐標(biāo)書寫規(guī)范

image.png

2 maven的依賴傳遞

2.1 什么是依賴傳遞

在maven中刹帕,依賴是可以傳遞的吵血,假設(shè)存在三個項目,分別是項目A偷溺,項目B以及項目C蹋辅。假設(shè)C依賴B,B依賴A挫掏,那么我們可以根據(jù)maven項目依賴的特征不難推出項目C也依賴A侦另。


image.png

image.png

通過上面的圖可以看到,我們的web項目直接依賴了spring-webmvc尉共,而spring-webmvc依賴了sping-aop褒傅、spring-beans等。最終的結(jié)果就是在我們的web項目中間接依賴了spring-aop袄友、spring-beans等殿托。

依賴沖突
由于依賴傳遞現(xiàn)象的存在, spring-webmvc 依賴 spirng-beans-5.1.5剧蚣,spring-aop 依賴 spring-beans-5.1.6支竹,但是發(fā)現(xiàn) spirng-beans-5.1.5 加入到了工程中旋廷,而我們希望 spring-beans-5.1.6 加入工程。這就造成了依賴沖突

image.png

2.2 如何解決依賴沖突

1.使用maven提供的依賴調(diào)解原則

  • 第一聲明者優(yōu)先原則
  • 路徑近者優(yōu)先原則

2.排除依賴
3.鎖定版本

2.3 依賴調(diào)節(jié)原則——第一聲明者優(yōu)先原則

在 pom 文件中定義依賴唾戚,以先聲明的依賴為準(zhǔn)柳洋。其實就是根據(jù)坐標(biāo)導(dǎo)入的順序來確定最終使用哪個傳遞過來的依賴。


image.png

結(jié)論:通過上圖可以看到叹坦,spring-aop和spring-webmvc都傳遞過來了spring-beans熊镣,但是因為
spring-aop在前面,所以最終使用的spring-beans是由spring-aop傳遞過來的募书,而spring-webmvc傳遞
過來的spring-beans則被忽略了绪囱。

2.4 依賴調(diào)節(jié)原則——路徑近者優(yōu)先原則

image.png

2.5 排除依賴

可以使用exclusions標(biāo)簽將傳遞過來的依賴排除出去。


image.png

2.6 版本鎖定

采用直接鎖定版本的方法確定依賴jar包的版本莹捡,版本鎖定后則不考慮依賴的聲明順序或依賴的路徑鬼吵,以
鎖定的版本為準(zhǔn)添加到工程中,此方法在企業(yè)開發(fā)中經(jīng)常使用篮赢。
版本鎖定的使用方式:
第一步:在dependencyManagement標(biāo)簽中鎖定依賴的版本
第二步:在dependencies標(biāo)簽中聲明需要導(dǎo)入的maven坐標(biāo)
①在dependencyManagement標(biāo)簽中鎖定依賴的版本


image.png

②在dependencies標(biāo)簽中聲明需要導(dǎo)入的maven坐標(biāo)


image.png

2.7 properties標(biāo)簽的使用

<properties>
<spring.version>5.1.5.RELEASE</spring.version>
<springmvc.version>5.1.5.RELEASE</springmvc.version>
<mybatis.version>3.5.1</mybatis.version>
</properties>
<!--鎖定jar版本-->
<dependencyManagement>
<dependencies>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- springMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

3 maven聚合工程

概念
在現(xiàn)實生活中齿椅,汽車廠家進(jìn)行汽車生產(chǎn)時,由于整個生產(chǎn)過程非常復(fù)雜和繁瑣启泣,工作量非常大涣脚,所以廠家都會將整個汽車的部件分開生產(chǎn),最終再將生產(chǎn)好的部件進(jìn)行組裝寥茫,形成一臺完整的汽車

image.png

3.1 分模塊構(gòu)建maven工程分析

在企業(yè)項目開發(fā)中遣蚀,由于項目規(guī)模大,業(yè)務(wù)復(fù)雜纱耻,參與的人員比較多芭梯,一般會通過合理的模塊拆分將一個大型的項目拆分為N多個小模塊,分別進(jìn)行開發(fā)弄喘。而且拆分出的模塊可以非常容易的被其他模塊復(fù)用

常見的拆分方式有兩種:
第一種:按照業(yè)務(wù)模塊進(jìn)行拆分玖喘,每個模塊拆分成一個maven工程,例如將一個項目分為用戶模塊蘑志,訂單模塊累奈,購物車模塊等,每個模塊對應(yīng)就是一個maven工程

第二種:按照層進(jìn)行拆分卖漫,例如持久層费尽、業(yè)務(wù)層、表現(xiàn)層等羊始,每個層對應(yīng)就是一個maven工程
不管上面那種拆分方式旱幼,通常都會提供一個父工程,將一些公共的代碼和配置提取到父工程中進(jìn)行統(tǒng)一管理和配置突委。


image.png

3.2 maven工程的繼承

在Java語言中柏卤,類之間是可以繼承的冬三,通過繼承,子類就可以引用父類中非private的屬性和方法缘缚。同樣勾笆,在maven工程之間也可以繼承,子工程繼承父工程后桥滨,就可以使用在父工程中引入的依賴窝爪。繼承的目的是為了消除重復(fù)代碼。


image.png

3.3 maven工程的聚合

在maven工程的pom.xml文件中可以使用標(biāo)簽將其他maven工程聚合到一起齐媒,聚合的目的是為了進(jìn)行
統(tǒng)一操作蒲每。
例如拆分后的maven工程有多個,如果要進(jìn)行打包喻括,就需要針對每個工程分別執(zhí)行打包命令邀杏,操作起來
非常繁瑣。這時就可以使用標(biāo)簽將這些工程統(tǒng)一聚合到maven父工程中唬血,需要打包的時候望蜡,只需要在此
工程中執(zhí)行一次打包命令,其下被聚合的工程就都會被打包了拷恨。
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脖律,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挑随,更是在濱河造成了極大的恐慌状您,老刑警劉巖勒叠,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜挨,死亡現(xiàn)場離奇詭異,居然都是意外死亡眯分,警方通過查閱死者的電腦和手機(jī)拌汇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弊决,“玉大人噪舀,你說我怎么就攤上這事∑” “怎么了与倡?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昆稿。 經(jīng)常有香客問我纺座,道長,這世上最難降的妖魔是什么溉潭? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任净响,我火速辦了婚禮少欺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馋贤。我一直安慰自己赞别,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布配乓。 她就那樣靜靜地躺著仿滔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犹芹。 梳的紋絲不亂的頭發(fā)上堤撵,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音羽莺,去河邊找鬼实昨。 笑死,一個胖子當(dāng)著我的面吹牛盐固,可吹牛的內(nèi)容都是我干的荒给。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刁卜,長吁一口氣:“原來是場噩夢啊……” “哼志电!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛔趴,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挑辆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孝情,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鱼蝉,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年箫荡,在試婚紗的時候發(fā)現(xiàn)自己被綠了魁亦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡羔挡,死狀恐怖洁奈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绞灼,我是刑警寧澤利术,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站低矮,受9級特大地震影響印叁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一喉钢、第九天 我趴在偏房一處隱蔽的房頂上張望姆打。 院中可真熱鬧,春花似錦肠虽、人聲如沸幔戏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闲延。三九已至,卻和暖如春韩玩,著一層夾襖步出監(jiān)牢的瞬間垒玲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工找颓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留合愈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓击狮,卻偏偏與公主長得像佛析,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彪蓬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容