任何一個構件(jar包) 都有一個惟一的GAV座標,根據這個座標,能夠定位到它在倉庫的存儲路勁。編程
以 junit爲例子緩存
<groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version>\junit\junit\4.12\junit-4.12.jar安全
若是有identifier,或者 extension 或在jar包名字後面加對應的名字服務器
{artificat}-{version}-{identifier}.{packing}網絡
對於Maven來講,倉庫有兩種,本地倉庫和遠程倉庫。maven
maven在構建的時候,會優先從本地倉庫找,若是沒有再去遠程倉庫找而且下載到本地倉庫。ide
本地倉庫 默認是在 ~/.m2/repository 下面, 也能夠自定義。經過修改maven的配置文件 MAVEN_HONE/conf/Setting.xml佈局
推薦在~/.m2/setting.xml 下作修改, 若是沒有則拷貝MAVEN_HONE/conf/Setting.xml一份過來,由於conf/Setting.xml是全局的配置。post
遠程倉庫是一個在線的MAVEN倉庫,能夠分爲三類, 中央倉庫,私服,其餘類型網站
能夠說是一個默認的 公共的遠程倉庫, 無論怎麼說,maven至少有一個遠程可用的倉庫存在,以保證在構建的時候,本地倉庫沒有任何可用的jar時候能夠訪問遠程庫進行下載。
無需作任何配置的狀況下, Maven默認將中央庫配置http://repo1.maven.org/maven2 下面。
私服是一個特殊的遠程倉庫,或者說是自行搭建的一個局域網內的在線倉庫,若是是公網那就編程中央倉庫了,
在有私服的狀況下,在本地庫不存在須要的jar 時候,會去私服上找,若是私服沒有再去中央庫下載。因此 私服它緩存了各大中央倉庫的構建,另外私服也能夠管理自行編寫的構件。
針對有網略限制,或者有安全策略的(畢竟開源的jar並非100%可靠的)社區或企業來講,搭建私服是一個很好的管理手段。
私服具備一下優點:
1. 節省外網帶寬。 2.加速構建,畢竟是局域網內 3. 上傳自定義構建 4.加強構建管理,5下降中央倉庫的負荷
倉庫配置,能夠在全局的配置文件或者項目pom文件裏面 作配置.
配置節點是 <repositoires>和<pluginRepositories>
分別對應 構件庫和插件庫,雖然理論上都是jar,根據做用不一樣作了配置區分。
另外配置的時候能夠指定下載 release仍是snapshot
id,name,和url 能夠任務是倉庫的GAV座標。
<repositories> <repository> <id>jboss</id> <name>jboss</name> <url>http://repostiory.jboss.com/maven2</url> <releases> <enabled>true</enabled> <checksumPolicy>ignore</checksumPolicy> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <checksumPolicy>ignore</checksumPolicy> <updatePolicy>daily</updatePolicy> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>jboss</id> <name>jboss</name> <url>http://repostiory.jboss.com/maven2</url> <releases> <enabled>true</enabled> <checksumPolicy>ignore</checksumPolicy> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>true</enabled> <checksumPolicy>ignore</checksumPolicy> <updatePolicy>daily</updatePolicy> </snapshots> </pluginRepository> </pluginRepositories>
下載策略指的是,什麼時候去中央庫緩存,同步,更新jar包。能夠配置的值有
daily; 天天同步一次
never: 歷來不一樣步
always:每次構建的時候 都去中央庫同步一次
interval X: x表示每隔多少分鐘同步跟新一次
檢驗策略指的是,在同步或者上傳構件的同時,會生成一份校驗和文件,當maven客戶端去下載構件的時候會進行校驗,配置的策略作出不一樣的處理。
可配置的值有
warn: 發出警告,但依然會繼續構建
ignore: 忽略校驗信息
fail: 構建失敗
大部分遠程倉庫是不須要認證,直接能夠訪問。 出於安全考慮遠程倉庫提供了認證服務。
與倉庫配置不一樣的是,它只能配置在 setting.xml裏面
配置節點是<servers>,同時支持2種認證方式, 用戶名密碼和非對稱密鑰。
<servers> <!-- server | Specifies the authentication information to use when connecting to a particular server, identified by | a unique name within the system (referred to by the 'id' attribute below). | | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are | used together. | <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> --> <!-- Another sample, using keys to authenticate. <server> <id>siteServer</id> <privateKey>/path/to/private/key</privateKey> <passphrase>optional; leave empty if not used.</passphrase> </server> --> </servers>
mvn clean deploy 中的deploy階段 並不是把jar或者war 部署到應用服務器上,對於初學者來講很是容易混淆,這裏的deploy是將構件 發不到遠程倉庫,至於發佈到哪一個遠程倉庫,須要早配置文件裏面作配置,
配置節點是< distributionManagement>,id,name,url 是標識,能夠經過id 在setting裏面配置對應的認證策略。
能夠配置 release repository 和snapshot repostiory
<distributionManagement> <repository> <id>ditritbution</id> <name>repository name</name> <url>url here</url> </repository> <snapshotRepository> <id> snapshot distribtion id</id> <name>repository name</name> <url>url here</url> </snapshotRepository> </distributionManagement>
若是X倉庫提供了Y倉庫的全部內容,則X倉庫是Y倉庫的鏡像,換句話說,從Y倉庫得到的構建,也能從X倉庫得到,因爲網絡緣由或者防火牆的緣故,各區域或就進建一個鏡像,按期同步源庫的構建,就近原則,因此鏡像的效率每每要高於源庫。
鏡像的配置在 setting.xml裏面,配置節點是< mirrors>, 其中mirrorOf 表示一箇中央倉庫的ID,任何一個訪問這個Id的請求都會路由到這個鏡像。
其中 mirrorOf 支持通配
如
<mirrorOf>*</mirrotOf> 匹配全部遠程倉庫
<mirrorOf>repo1,repor2</mirrotOf>匹配repo1,repo2遠程倉庫
<mirrorOf>*,! repor2</mirrotOf>匹配全部遠程倉庫 repo2除外
<mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. | <mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> --> </mirrors>
在平常開發中,想要具體知道 構建的GAV,能夠經過如下幾個搜索網站進行查詢
Sonatype Nexus:https://repository.sonatype.org/ MVNBrowser: http://www.mvnbrowser.com Mvn Repository: http://mvnrepository.com