2.1 Maven坐標(biāo)
Maven通過下面幾個元素定義坐標(biāo):groupId、artifactId、version、packaging、classifier.
groupId:定義當(dāng)前Maven項目隸屬的實際項目。不應(yīng)該是組織或公司(一個公司有很多項目,每個項目有很多模塊)。
artifactId:定義實際項目的一個Maven模塊,推薦使用實際項目名稱作為前綴。
version:定義Maven項目當(dāng)前所處的版本。
packaging:定義Maven項目的打包方式,可選的有:jar(默認(rèn))、war、pom,不同的打包方式會影響構(gòu)建的生命周期。
classifier:定義構(gòu)建輸出的一些附屬構(gòu)建,如javadoc、sources。
2.2 Maven倉庫
Maven坐標(biāo)是一個構(gòu)件的邏輯表示,構(gòu)件的物理表示是文件,Maven通過倉庫來統(tǒng)一管理這些文件。
得益于坐標(biāo)機(jī)制,Maven項目能夠以統(tǒng)一的方式來使用任何構(gòu)件,在此基礎(chǔ)上,Maven可以在某個位置統(tǒng)一存儲所有Maven項目共享的構(gòu)建,這個統(tǒng)一位置就是倉庫。
2.2.1 倉庫的分類
Maven中的倉庫分為:本地倉庫和遠(yuǎn)程倉庫。
Maven根據(jù)坐標(biāo)尋找構(gòu)件時,先查看本地倉庫是否存在該構(gòu)件,存在則直接使用;否則就查找遠(yuǎn)程倉庫,找到之后就下載到本地倉庫;本地和遠(yuǎn)程都沒找到,直接報錯。

中央倉庫是Maven核心自帶的遠(yuǎn)程倉庫,含絕大多數(shù)開源的構(gòu)件;
私服是在局域網(wǎng)搭建的倉庫服務(wù)器,用于代理外部的遠(yuǎn)程倉庫,可以節(jié)省帶寬和時間,內(nèi)部的項目還能部署到私服供其他項目使用;使用私服可以加速M(fèi)aven構(gòu)建以及提高穩(wěn)定性,內(nèi)網(wǎng)訪問不需要依賴于網(wǎng)絡(luò)。
其他公共服,如阿里云等。
本地倉庫:配置路徑${M2_HOME}/conf/settings.xml,默認(rèn)是${user.home}/.m2/repository.
構(gòu)件進(jìn)入本地倉庫有兩種方式:Maven從遠(yuǎn)程倉庫下載到本地倉庫;通過在項目執(zhí)行mvn install安裝到本地。
對Maven而言,用戶的本地倉庫只有一個,但可以配置訪問很多遠(yuǎn)程倉庫。而中央倉庫是默認(rèn)的遠(yuǎn)程倉庫,在$M2_HOME/lib/maven-model-builder-{version}.jar的org/apache/maven/model/pom-4.0.0.xml文件定義了,該POM也被稱為超級POM。
2.2.2 倉庫的布局
構(gòu)件在Maven倉庫里的存儲路徑為:{groupId}/{artifactId}/{version}/{artifactId-version.packaging}
2.2.3 遠(yuǎn)程倉庫的配置
通過POM文件的<repositories><repository>元素可以配置遠(yuǎn)程倉庫,如:
<repositories>
<repository>
<id>jboss</id>
<name>jboss repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
<id>:必須是唯一的,默認(rèn)的中央倉庫id是central,如果使用了該id,會覆蓋中央倉庫配置。
<url>:執(zhí)行倉庫的地址
<releases> <enabled>:開發(fā)發(fā)布版本支持
<snapshots> <enabled>:關(guān)閉快照版本支持
<layout>:值為default表示倉庫的布局是Maven 2及Maven 3,而不是Maven 1.
相比于發(fā)布版本,快照版本還有下面兩個屬性:
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
<updatePolicy>:更新策略,默認(rèn)daily,可選擇有never、always、interval:X (X分鐘檢查一次)。
<checksumPolicy>:Maven檢查校驗和的策略,默認(rèn)值是warn(校驗不通過時警告),可選擇還有fail(校驗不通過時構(gòu)建失敗)、ignore(忽略校驗錯誤)
2.3 鏡像
如果倉庫X可以提供倉庫Y存儲的所有內(nèi)容,則認(rèn)為X是Y的一個鏡像。關(guān)于鏡像的配置可以在${M2_HOME}/conf/settings.xml中進(jìn)行配置:
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<mirrorOf>:匹配遠(yuǎn)程倉庫的規(guī)則,匹配成功,則使用該鏡像進(jìn)行代理
Remark:由于鏡像倉庫完全屏蔽了被鏡像倉庫,當(dāng)鏡像倉庫不穩(wěn)定或者停止服務(wù)時,Maven仍將無法訪問被鏡像倉庫,因而將無法下載構(gòu)件。
?