目錄
maven的安裝不在這里講了,網(wǎng)上教程一大堆。
需要注意的:
(1).安裝完maven后建議更改本地倉(cāng)庫的位置,在conf->setting.xml中修改
<localRepository></localRepository>
- 1
(2).maven的默認(rèn)遠(yuǎn)程倉(cāng)庫位置在lib目錄下的maven-model-builder.jar的pom-4.0.0.xml中的
<repositories>
<repository>
<url>http://repo.maven./maven2</url>
</repository>
</repositories>
- 1
- 2
- 3
- 4
- 5
6月22日補(bǔ)充:這篇博客沒有寫如何具體創(chuàng)建maven父子工程,其實(shí)我本人也到網(wǎng)上看過很多創(chuàng)建父子工程的博客,大同小異但是有些許不同,觀察比較細(xì)的同學(xué)會(huì)發(fā)現(xiàn)有些文章比如idea是先創(chuàng)建空項(xiàng)目還是先創(chuàng)建maven工程但是不選擇骨架。比如eclipse子項(xiàng)目是創(chuàng)建maven project還是必須創(chuàng)建maven module。重點(diǎn)不在于你用哪種方式創(chuàng)建,重點(diǎn)是創(chuàng)建出來的項(xiàng)目要符合maven規(guī)范,如父項(xiàng)目package值為POM(哪怕你創(chuàng)建時(shí)候選錯(cuò)了都可以自行到pom.xml中手動(dòng)改,甚至你可以手動(dòng)創(chuàng)建項(xiàng)目的目錄結(jié)構(gòu),目錄結(jié)構(gòu)你足夠熟悉就好。)
1.maven常用命令:
- 打包:mvn package (打包后放入target中)
- 編譯:mvn compile(會(huì)生成target目錄,并把編譯后的class放在classes中)
- 清空:mvn clean (清空target)
- 測(cè)試:mvn test (測(cè)試報(bào)告生成后存在target中,一般是三個(gè)文件)
- 安裝: mvn install (將項(xiàng)目安裝到本地倉(cāng)庫中)
- 發(fā)布: mvn deploy (發(fā)不到私服)
2.maven依賴
(1).依賴是具有傳遞性的.
(2).依賴傳遞原則:層級(jí)相同時(shí)按引入順序傳遞,層級(jí)不同時(shí)按層級(jí)最短的傳遞
舉個(gè)栗子:
A->B->C->X(1.0)
A->D->X(2.0)
由于只能引入一個(gè)版本的包,此時(shí)Maven按照最短路徑選擇導(dǎo)入x(2.0)
A->B->X(1.0)
A->D->X(2.0)
路徑長(zhǎng)度一致,則優(yōu)先選擇第一個(gè),此時(shí)導(dǎo)入x(1.0)
還有resources也是可以傳遞的,當(dāng)然resources中的文件不涉及層級(jí)問題,所以resources是按照dependency順序引入的。當(dāng)然如果本項(xiàng)目中能匹配到的話優(yōu)先選擇本項(xiàng)目中的。
(3).scope標(biāo)簽的值會(huì)影響依賴,這里暫時(shí)先不展開了.
(4).排除依賴可以用
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
- 1
- 2
- 3
- 4
- 5
- 6
3.聚合
建立一個(gè)簡(jiǎn)單項(xiàng)目artifactId為user-parent
<modules>
<module>../user-service</module>
<module>../user-core</module>
<module>../user-log</module>
</modules>
- 1
- 2
- 3
- 4
- 5
實(shí)現(xiàn)對(duì)三個(gè)項(xiàng)目的聚合,module標(biāo)簽中是其他項(xiàng)目的路徑.這樣所有項(xiàng)目都在通過操作父項(xiàng)目操作來實(shí)現(xiàn)了.
注意:modules的順序是不重要的,因?yàn)閙aven會(huì)自動(dòng)根據(jù)依賴關(guān)系來拓?fù)渑判?
4.繼承
子項(xiàng)目中添加:
<parent>
<groupId>cn.milo.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 這里是要指到pom文件的 -->
<relativePath>../user-parent/pom.xml</relativePath>
</parent>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
6月22日補(bǔ)充:這里講一下relativePath標(biāo)簽,如果不寫這個(gè)標(biāo)簽,子項(xiàng)目會(huì)默認(rèn)在子項(xiàng)目pom.xml的父目錄中查找pom.xml,沒有找到的話會(huì)依次到本地倉(cāng)庫,遠(yuǎn)程倉(cāng)庫中找對(duì)應(yīng)的父項(xiàng)目并找到對(duì)應(yīng)的pom.xml.所以協(xié)同開發(fā)的話父項(xiàng)目要先deploy到私有倉(cāng)庫.私有倉(cāng)庫用法參照 : maven入門:nexus安裝與使用(二)
父項(xiàng)目中添加依賴管理:
<!-- 依賴管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</dependencyManagement>
父項(xiàng)目中添加依賴管理:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
如上配置后子項(xiàng)目添加父項(xiàng)目中的jar包就不需要寫version標(biāo)簽了