約定(慣例)優(yōu)先于配置
這個(gè)原則說(shuō)對(duì)于一些配置信息,maven會(huì)有給定的default默認(rèn)值,這樣,就不需要用戶去手動(dòng)配置更多的信息了。比如,maven-complier的版本。
標(biāo)準(zhǔn)的目錄結(jié)構(gòu)
如果沒(méi)有修改配置的話,我們的代碼存放在src/main/java目錄下,*.class在target目錄下,配置及靜態(tài)文件默認(rèn)放在src/main/webapp/WEB-INF目錄下。我們只需要將源代碼放置到正確的目錄下,就可以了。
項(xiàng)目描述符pom.xml
這個(gè)文件的名字默認(rèn)即為pom.xml。
pom.xml
pom(project object model),定義一個(gè)maven項(xiàng)目,存放項(xiàng)目的類型,項(xiàng)目的配置信息。artifact(構(gòu)建)于project幾乎等價(jià)。
項(xiàng)目類型:<package>:pom,jar,war...
坐標(biāo):<groupId><artifactId><version>
屬性:<properties>
屬性標(biāo)簽定義常量,它的格式如下:
<properties>
<name>content</name>
</properties>
使用時(shí),采用${name}的方法來(lái)獲取。當(dāng)我們需要改動(dòng)一個(gè)變量時(shí),只用更改一處即可。
依賴<dependencies>
構(gòu)建配置<build>
構(gòu)建<build>標(biāo)簽里存放的主要是maven構(gòu)建的配置項(xiàng),比如插件等。
多項(xiàng)目繼承關(guān)系
子項(xiàng)目:<parent>和父項(xiàng)目<modules>,分別存放項(xiàng)目的信息。
項(xiàng)目總體信息
更多存在于開(kāi)源項(xiàng)目中,存放開(kāi)源協(xié)議,作者等信息。
存在的問(wèn)題
我們的項(xiàng)目一般都是拆分為多個(gè)子項(xiàng)目來(lái)進(jìn)行開(kāi)發(fā)的,在這個(gè)過(guò)程中,總是會(huì)出現(xiàn)多個(gè)項(xiàng)目配置信息重復(fù)的現(xiàn)象,修改的時(shí)候會(huì)很繁瑣,可能會(huì)出現(xiàn)依賴版本不一致等情況,會(huì)導(dǎo)致配置管理混亂。
針對(duì)這個(gè)問(wèn)題,我們借助面向?qū)ο蟮乃枷?,采用集成的思路,將公共部分存放到父?jié)點(diǎn)中。
繼承:
繼承存在Override重寫的現(xiàn)象,子pom的配置優(yōu)先。
可繼承項(xiàng):
坐標(biāo)屬性,依賴配置,插件配置和一般性信息,如開(kāi)發(fā)者信息等。
對(duì)于pom來(lái)說(shuō),也有繼承的根,所有的pom都繼承自Super pom文件。它是maven的組成部分,存放在maven的安裝目錄下。如果沒(méi)有顯式指明,默認(rèn)從super pom繼承。Super pom定義了一些信息,如默認(rèn)的文件結(jié)構(gòu),默認(rèn)的編譯器版本,默認(rèn)的中央倉(cāng)庫(kù)等。
mvn help:effective-pom//查看繼承后的pom
手動(dòng)繼承
如果我們想要使用手動(dòng)繼承的方式來(lái)管理配置的話,需要借助<parent>元素,來(lái)聲明繼承的對(duì)象。
多么塊構(gòu)建
父項(xiàng)目
類型為pom,定義<modules>
子項(xiàng)目
配置<parent>,類型一般為war或者jar。
我們即使用繼承,又使用組合,將多個(gè)子模塊聚合到父pom中,在構(gòu)建時(shí)會(huì)方便許多。