Maven依賴管理簡(jiǎn)介
如果我們想要?jiǎng)?chuàng)建一個(gè)Java項(xiàng)目乱豆,我們首先需要知道我們這個(gè)項(xiàng)目需要確定哪些依賴包。例如,如果我們需要junit
,我們就需要把它的jar包放入classpath中叙凡。如果我們還需要其他的包厌蔽,那么也要把其他的包加入到classpath中。
但是這個(gè)過程抢腐,往往十分繁瑣姑曙,可以想象這樣一個(gè)場(chǎng)景,我們的Java項(xiàng)目中依賴了a包氓栈,a包又依賴了b包渣磷,b包又依賴了c包... ...
a->b->c->d->e->··· ···
Maven
可以很好的幫助我們解決這個(gè)問題,通常情況下一個(gè)使用Maven管理的普通的Java項(xiàng)目,它的目錄結(jié)構(gòu)看起來是下面這個(gè)樣子的:
a-maven-project
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ ├── java
│ └── resources
└── target
項(xiàng)目的根目錄a-maven-project
是項(xiàng)目名授瘦,它有一個(gè)項(xiàng)目描述文件pom.xml
醋界,存放Java源碼的目錄是src/main/java
,存放資源文件的目錄是src/main/resources
提完,存放測(cè)試源碼的目錄是src/test/java
形纺,存放測(cè)試資源的目錄是src/test/resources
,最后徒欣,所有編譯逐样、打包生成的文件都放在target
目錄里。這些就是一個(gè)Maven項(xiàng)目的標(biāo)準(zhǔn)目錄結(jié)構(gòu)打肝。
前面說到Maven可以替我們進(jìn)行依賴管理脂新,解放生產(chǎn)力,就是因?yàn)楫?dāng)我們需要依賴前文中所提到的a包時(shí)粗梭,我們只需要聲明我們依賴了a包争便,Maven就會(huì)自動(dòng)將a包依賴的包加入我們的項(xiàng)目依賴
申明一個(gè)依賴的方式也很簡(jiǎn)單,只需在pom.xml
中進(jìn)行配置即可断医,例如
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
我們只需要將這幾行語句添加到pom.xml
中以<dependencies>
開頭滞乙,以</dependencies>
結(jié)尾的中間奏纪,就聲名了這個(gè)依賴,而這個(gè)包依賴的其他包斩启,也會(huì)由Maven自動(dòng)幫我們加入到項(xiàng)目中序调,如下圖。
最后解釋一下這幾行語句的意義:
其中兔簇,groupId
類似于Java的包名发绢,通常是公司或組織名稱,artifactId
類似于Java的類名男韧,通常是項(xiàng)目名稱朴摊,再加上version
,一個(gè)Maven工程就是由groupId此虑,artifactId和version作為唯一標(biāo)識(shí)甚纲。我們?cè)谝闷渌谌綆斓臅r(shí)候,也是通過這3個(gè)變量確定朦前。scope
作中文講是范圍的意思介杆,它聲明了幾種依賴關(guān)系,具體見下表:
scope | 說明 |
---|---|
compile | 編譯時(shí)需要用到該jar包(默認(rèn)) |
test | 編譯Test時(shí)需要用到該jar包 |
runtime | 編譯時(shí)不需要韭寸,但運(yùn)行時(shí)需要用到 |
provided | 編譯時(shí)需要用到春哨,但運(yùn)行時(shí)由JDK或某個(gè)服務(wù)器提供 |
總結(jié)
- 在Maven中聲明一個(gè)依賴項(xiàng)可以自動(dòng)下載并導(dǎo)入classpath
- Maven使用groupId,artifactId和version唯一定位一個(gè)依賴恩伺。
- Maven使用pom.xml定義項(xiàng)目?jī)?nèi)容赴背,并使用預(yù)設(shè)的目錄結(jié)構(gòu)
- Maven常用的4種scope有:compile(默認(rèn)),test晶渠,runtime和provided