1.Maven 中的坐標(biāo):
類(lèi)比數(shù)學(xué)中,平面x y軸,空間x y z軸可以確定到唯一的一個(gè)點(diǎn)
那么在Maven中,使用下面三個(gè)向量可以唯一地定位倉(cāng)庫(kù)中的任何一個(gè)點(diǎn)。
- groupId:公司或組織域名倒序 + 項(xiàng)目名
<groupid>com.ys.maven</groupid>- artifactId:項(xiàng)目名
<artifactid>Maven_05</artifactid>- version:版本號(hào)
<version>0.0.1-SNAPSHOT</version>
2.Maven 依賴的詳細(xì)配置講解:
全部配置如下
<project>
<dependencies>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.8.1</version>
<type>...</type>
<scope>...</scope>
<optional>...</optional>
<exclusions>
<exclusion>
<groupId>...</groupId>
<artifactId>...</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
①、dependencies:一個(gè) pom.xml 文件中只能存在一個(gè)這樣的標(biāo)簽。用來(lái)管理依賴的總標(biāo)簽。
②、dependency:包含在dependencies標(biāo)簽中,可以有無(wú)數(shù)個(gè),每一個(gè)表示一個(gè)依賴
③、groupId,artifactId和version:依賴的基本坐標(biāo),對(duì)于任何一個(gè)依賴來(lái)說(shuō),基本坐標(biāo)是最重要的,Maven根據(jù)坐標(biāo)才能找到需要的依賴。
④、type:依賴的類(lèi)型,對(duì)應(yīng)于項(xiàng)目坐標(biāo)定義的packaging。大部分情況下,該元素不必聲明,其默認(rèn)值是jar。
⑤、scope:依賴的范圍,默認(rèn)值是 compile。后面會(huì)進(jìn)行詳解。
⑥、optional:標(biāo)記依賴是否可選。
⑦、exclusions:用來(lái)排除傳遞性依賴,后面會(huì)進(jìn)行詳細(xì)介紹。
3.Maven 依賴范圍以及區(qū)別:
compile 范圍依賴(maven的默認(rèn)依賴范圍)
- 參與編譯時(shí)是否對(duì)主程(src/main/java)序有效:有效
- 參與編譯時(shí)是否對(duì)測(cè)試(src/test/java)程序有效:有效
- 是否參與打包:參與
- 是否參與部署:參與
test范圍依賴 eg:junit單元測(cè)試jar
- 參與編譯時(shí)是否對(duì)主程(src/main/java)序有效:無(wú)效
- 參與編譯時(shí)是否對(duì)測(cè)試(src/test/java)程序有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
provided 范圍依賴 eg:一些服務(wù)器自帶的jar無(wú)需另外提供 servlet-api.jar
- 參與編譯時(shí)是否對(duì)主程(src/main/java)序有效:有效
- 參與編譯時(shí)是否對(duì)測(cè)試(src/test/java)程序有效:有效
- 是否參與打包:不參與
- 是否參與部署:不參與
runtime 范圍依賴
- 只在測(cè)試、運(yùn)行的時(shí)候依賴,在編譯的時(shí)候不依賴。例如:JDBC驅(qū)動(dòng),項(xiàng)目代碼只需要jdk提供的jdbc接口,只有在執(zhí)行測(cè)試和運(yùn)行項(xiàng)目的時(shí)候才需要實(shí)現(xiàn)jdbc的功能。
4.Maven 依賴傳遞性:
①、當(dāng)?shù)诙蕾嚨姆秶莄ompile的時(shí)候,傳遞性依賴的范圍與第一直接依賴的范圍一致。
②、當(dāng)?shù)诙苯右蕾嚨姆秶莟est的時(shí)候,依賴不會(huì)得以傳遞。
③、當(dāng)?shù)诙蕾嚨姆秶莗rovided的時(shí)候,只傳遞第一直接依賴范圍也為provided的依賴,且傳遞性依賴的范圍同樣為 provided;
④、當(dāng)?shù)诙苯右蕾嚨姆秶莚untime的時(shí)候,傳遞性依賴的范圍與第一直接依賴的范圍一致,但compile例外,此時(shí)傳遞的依賴范圍為runtime;
5.Maven 可選依賴:
- maven默認(rèn)是按照依賴范圍來(lái)進(jìn)行依賴傳遞的(上面依賴傳遞已經(jīng)說(shuō)明四種依賴范圍的傳遞性)
- 假如你不想jar包依賴下去 你可以設(shè)置Optional標(biāo)簽屬性,默認(rèn)是false。如果為true,則表示該依賴不會(huì)傳遞下去,如果為false,則會(huì)傳遞下去。
6.Maven 依賴排除:
使用exclusions來(lái)進(jìn)行依賴排除,可以用來(lái)防止jar包沖突
例如我們?cè)诘谝还こ桃肓藄pring-core.jar包 它會(huì)默認(rèn)引入common-logging.jar 假如我們不需要common-logging.jar 可以使用exclusions來(lái)進(jìn)行依賴排除:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.24.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
7.Maven 依賴沖突問(wèn)題:
在maven中存在兩種沖突 一種是同pom文件沖突,一種是跨pom文件沖突
- 跨pom文件jar沖突,這種情況會(huì)優(yōu)先選擇最短路徑的jar
假如我有三個(gè)maven工程 依次依賴 第三依賴第二,第二依賴第一
現(xiàn)在我在第二和第一中同時(shí)引入一樣的jar 這時(shí)候第三maven工程會(huì)同時(shí)
優(yōu)選選擇他最近依賴的工程二中的jar- 同pom文件中的則是先聲明先依賴(注意 pom文件越往下越早依賴)