Maven的仓库(转载自Maven实战 作者许晓斌)
1、Maven的倉庫
Maven中任何一個依賴、插件或者項目構建的輸出,都可以成為構件。任何一個構件都有一組坐標唯一標識。一個工作站上可能有幾十個Maven項目,得益于坐標機制,任何Maven項目使用任何構件的方式都是完全相同的。再次基礎上,Maven可以在某個位置存儲所有Maven共享項目的構件,這個統一的位置就是倉庫。在Maven項目中不再各自存儲其依賴文件,只需要聲明依賴的坐標,在需要的時候(編譯項目的時候需要將依賴加入到classpath中),Maven會自動根據坐標找到倉庫的構件并使用。
2、倉庫的布局
任何一個構件都有其唯一的坐標,根據這個坐標定義其在倉庫里的唯一存儲路徑。例如log4j:log4j:1.2.15這個依賴,其對應的倉庫路徑為log4j/log4j/1.2.15/log4j-1.2.15.jar。坐標的大致對應關系為groupId/artifactId/version/artifactId-version.packaging。
3、倉庫的分類
對于Maven來說倉庫分為兩類:本地倉庫和遠程倉庫。中央倉庫是Maven自帶的遠程倉庫,它包含了大部分開源的構件。在默認情況下,本地倉庫沒有Maven需要的構件的時候,他就會嘗試從中央倉庫下載。
私服是另外一種特殊的倉庫,為了節省帶寬和時間,應該在局域網內架設一個私有的倉庫服務器,用其代理所有的外部的遠程倉庫,內部的項目還能部署到私服上供別的項目使用。
除了中央服務器和私服,還有其他許多公開的遠程倉庫,如java.net Maven庫(http://download.java.net/maven/2/)和JBoss Maven庫(http://repository.jboss.com/maven2/)等。
1、本地倉庫
默認情況下Maven的本地倉庫是在~/.m2/repository,如果因為C盤空間不夠想要自定義了倉庫的位置。可以編輯~/m2/settings.xml:
<settings><localRepository>...</localRepository> </settings>這樣就可以更改本地倉庫的地址。
一個構件只有在本地倉庫中之后才可以被其他Maven項目使用。將項目安裝到本地倉庫中可以用指令:
mvn clean install2、遠程倉庫
當Maven無法從本地倉庫找到相應的構件時,就會從遠程倉庫下載構件到本地倉庫。一個用戶只有一個本地倉庫,但是可以配置多個遠程倉庫。
3、中央倉庫
最原始的本地倉庫是空的,Maven的安裝文件中自帶了中央倉庫的配置。在Maven的安裝目錄下的/lib/maven-model-builder-XX.jar的jar包中的pom-4.0.0.xml中有如下的配置:
<repositories><repository><id>central</id><name>Central Repository</name><url>https://repo.maven.apache.org/maven2</url><layout>default</layout><snapshots><enabled>false</enabled></snapshots></repository></repositories>配置了默認的中央倉庫,所有的Maven項目都會繼承這個POM,所以都會有這個配置。
4、私服
私服是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網用戶使用。當Maven需要下載構件的時候,他從私服請求,如果私服不存在當前構件,則從外部的遠程倉庫緩存到私服上之后再為Maven的下載請求提供服務,此外一些無法從外部倉庫下載到的構件也可以手工上傳到私服上供大家使用。
4、遠程倉庫的配置
很多情況下,默認的中央倉庫無法滿足項目的需求,可能項目需要的構件存在于另外一個遠程倉庫,可以在POM進行配置:
<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></repository></repositories>該配置中releases和snapshots使用來控制發布版本和快照版本的下載。這個配置表示允許下載發布版本,關閉JBoss倉庫的快照版本的下載支持。根據該配置,Maven只會從JBoss倉庫中下載發布版本的構件不會下載快照版本的構件。除了enabled之外還有updatePolicy和checksumPolicy:
<snapshots><enabled>false</enabled><checksumPolicy>ignore</checksumPolicy><updatePolicy>daily</updatePolicy> </snapshots>元素updatePolicy表示Maven從遠程倉庫的更新頻率包括:daily、never、always、interval:x 每隔X分鐘檢查一次更新
checksumPolicy表示Maven檢查檢驗和文件的策略。包括warn:構建時輸出警告信息 fail:直接構建失敗 ignore:忽略
1、遠程倉庫的認證
有些遠程倉庫基于安全的考慮需要提供認證信息才可以訪問。配置認證信息需要在settings.xml文件中配置:
<server><id>deploymentRepo</id><username>repouser</username><password>repopwd</password> </server>2、部署到遠程倉庫
Maven除了對項目進行編譯,測試和打包之外,還能將項目部署到倉庫中,首先編輯POM文件添加distributionManagementy元素:
<distributionManagement><repository><id>proj-releases</id><name>Proj Releases Repository</name><url>http://192.168.1.100/content/repositories/proj-releases</url></repository><snapshotRepository><id>proj-snapshots</id><name>Proj Snapshots Repository</name><url>http://192.168.1.100/content/repositories/proj-snapshots</url> </snapshotRepository>然后如果需要認證需要根據上面的配置進行認證。
5、鏡像
如果倉庫X可以提供倉庫Y存儲的所有內容,那么就可以認為X是Y的鏡像。配置如下:
<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>其中mirrorOf對應被鏡像的倉庫ID。如果為* 表示該配置是所有Maven倉庫的鏡像。對于任何倉庫的請求都會被轉移到這個配置。
- * :匹配所有的倉庫
 - external:*:匹配所有的遠程倉庫,使用localhost的除外,使用file://的除外。
 - repo1,repo2:匹配倉庫repo1和repo2,使用逗號分隔多個倉庫。
 - *,!repo1 :匹配所有的遠程倉庫除了repo1。
 
需要注意的是由于鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務時,Maven將無法訪問被鏡像倉庫。
 
 
 
總結
以上是生活随笔為你收集整理的Maven的仓库(转载自Maven实战 作者许晓斌)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: sina微博之errorcode:200
 - 下一篇: 博弈论完全信息博弈思维导图