Maven座標是Maven用來表示一個組件依賴的標示。
Maven
經過下面幾個元素定義座標:groupId、artifactId、version、packaging、classifier
.java
groupId
:定義當前Maven
項目隸屬的實際項目。不該該是組織或公司(一個公司有不少項目,每一個項目有不少模塊)。apache
artifactId
:定義實際項目的一個Maven
模塊,推薦使用實際項目名稱做爲前綴。服務器
version
:定義Maven
項目當前所處的版本。網絡
packaging
:定義Maven
項目的打包方式,可選的有:jar
(默認)、war
、pom
,不一樣的打包方式會影響構建的生命週期。maven
classifier
:定義構建輸出的一些附屬構建,如javadoc
、sources
。佈局
Maven
座標是一個構件的邏輯表示,構件的物理表示是文件,Maven
經過倉庫來統一管理這些文件。ui
得益於座標機制,Maven
項目可以以統一的方式來使用任何構件,在此基礎上,Maven
能夠在某個位置統一存儲全部Maven
項目共享的構建,這個統一位置就是倉庫。阿里雲
Maven
中的倉庫分爲:本地倉庫和遠程倉庫。url
Maven根據座標尋找構件時,先查看本地倉庫是否存在該構件,存在則直接使用;不然就查找遠程倉庫,找到以後就下載到本地倉庫;本地和遠程都沒找到,直接報錯。代理
中央倉庫是Maven
核心自帶的遠程倉庫,含絕大多數開源的構件;
私服是在局域網搭建的倉庫服務器,用於代理外部的遠程倉庫,能夠節省帶寬和時間,內部的項目還能部署到私服供其餘項目使用;使用私服能夠加速Maven構建以及提升穩定性,內網訪問不須要依賴於網絡。
其餘公共服,如阿里雲等。
本地倉庫:配置路徑${M2_HOME}/conf/settings.xml
,默認是${user.home}/.m2/repository
.
構件進入本地倉庫有兩種方式:Maven
從遠程倉庫下載到本地倉庫;經過在項目執行mvn install
安裝到本地。
對Maven
而言,用戶的本地倉庫只有一個,但能夠配置訪問不少遠程倉庫。而中央倉庫是默認的遠程倉庫,在$M2_HOME/lib/maven-model-builder-{version}.jar
的org/apache/maven/model/pom-4.0.0.xml
文件定義了,該POM
也被稱爲超級POM
。
構件在Maven倉庫裏的存儲路徑爲:{groupId}/{artifactId}/{version}/{artifactId-version.packaging}
經過POM
文件的<repositories><repository>
元素能夠配置遠程倉庫,如:
<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>
相比於發佈版本,快照版本還有下面兩個屬性:
<snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </snapshots>
daily
,可選擇有
never
、
always
、
interval:X
(X分鐘檢查一次)。
Maven
檢查校驗和的策略,默認值是
warn
(校驗不經過時警告),可選擇還有
fail
(校驗不經過時構建失敗)、
ignore
(忽略校驗錯誤)
若是倉庫X能夠提供倉庫Y存儲的全部內容,則認爲X是Y的一個鏡像。關於鏡像的配置能夠在${M2_HOME}/conf/settings.xml
中進行配置:
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
Remark:因爲鏡像倉庫徹底屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者中止服務時,Maven仍將沒法訪問被鏡像倉庫,於是將沒法下載構件。