Maven 倉庫、鏡像
項目構建工具Maven的學習筆記,主要講解Maven 的倉庫、鏡像 相關信息
1、倉庫中jar包定位
在maven世界中任何一個依賴、插件或者項目構建的輸出都可以稱為構件,任何一個構件都有一個坐標作為唯一的標識。
這個坐標就是:group、artifactId、version;根據這個坐標就可以定義其在倉庫的唯一存儲路徑,那么就可以在項目中引用。
<groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version>
2、Maven倉庫原理
Maven倉庫是基于簡單文件系統存儲的,只要在文件系統中沒有發現相關的文件,說明這幾依賴并不存在,因此,我們很容易在本地倉庫查找具體的依賴是否存在。
3、倉庫的分類信息(本地倉庫、遠程倉庫)
1)本地倉庫就是我們自己機器上的文件系統,所以他是唯一的,項目構建時首先在本地倉庫查找依賴,如果本地沒有依賴時才會去尋找遠程倉庫。
2)遠程倉庫指的是非本地的其他所有倉庫,中央倉庫、私服等都是遠程倉庫的一種。如果本地倉庫沒有項目構建需要的構件,你們就會從遠程倉庫下載,可是遠程倉庫如果也沒有的話,你們就會項目報錯。
4、本地倉庫設置
<localRepository>D:\Program Files\apache-maven-3.2.2-repository</localRepository>
安裝的時候有個一conf/settings.xml文件,這個文件時全局控制文件,另外,還有一個就是C:\Users\Heweipo\.m2 下面也會有一個settings.xml文件,這個代表的是個人局部配置文件,然而,我們使用Eclipse默認采用這個settings.xml文件,可以通過如下截圖修改:
5、中央倉庫
Maven必須知道至少一個可用的遠程倉庫,才能執行Maven命令的時候下載到需要的構件。中央倉庫就是這樣一個默認的遠程倉庫,Maven安裝文件自帶遠程倉庫的位置是
http://repo.maven.apache.org/maven2
具體中央倉庫在settings.xml文件的配置如下:
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>always</checksumPolicy> </snapshots> </repository> </repositories>
6、私服
私服是一種特殊的遠程倉庫,他是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用。當Maven需要下載構件的時候,它從私服請求,如果私服上不存在改構件,則從外部的遠程倉庫下載,同時緩存在私服之上,然后為Maven下載請求提供服務,另外,對于第三方的jar無法從倉庫下載(JDBC驅動)可以從本地上傳到私服供客戶端下載。
優點主要有:
1)節省外網寬帶
2)加速Maven構建
3)部署第三方構件
4)提高穩定性、增強控制:原因是外網不穩定
5)降低中央倉庫的負荷:原因是中央倉庫訪問量太大
7、遠程倉庫認證
有時候登錄一個遠程倉庫需要用戶名和密碼進行身份驗證,所以,需要遠程倉庫認證。配置認證信息和配置倉庫信息不同,倉庫信息可以直接配置POM文件中,但是認證信息必須配置在settings.xml文件中,目的就是安全性。當然,我們可以把倉庫信息配置在settings.xml 中,這樣的缺點就是好動態控制倉庫,但是一般情況下不會改變倉庫,我們本地私服一般都是唯一的。
<server> <id>deploymentRepo_releases</id> <username>repouser</username> <password>repopwd</password> </server>
值得注意的是,ID代表的是某個repository元素配置的ID。
8、遠程倉庫部署
<distributionManagement> <repository> <id>deploymentRepo_releases</id> <name>Nexus Release Repository</name> <url>http://localhost:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>deploymentRepo_snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://localhost:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement>
我們開發的版本可以通過 mvn deploy 把項目部署到對應的私服上去對于為什么要把發行版本和快照版本分開主要還是為了方便后期項目維護和當時的協同開發。比如發行版本肯定是穩定版,但是他的功能可能沒有那么多,對于一些要求穩定的客戶就可以給他發行版本;可是對于快照版本來說,是一個正在開發的版本,這個版本可能隨時都會被另外一個項目依賴,如果他需要我的功能我就會進行代碼提交,也就是部署到私服上去,然而,這個時候Maven就會把我的快照版本做一個時間戳添加在快照版本之后,別人依賴的快照版本也會自動更新為最新的快照版本,這些都是Maven幫我們完成,我們只要項目提交就好。
9、鏡像
如果倉庫X可以提供倉庫Y存儲的所有內容,那么就可以認為X是Y的一個鏡像,某些情況下使用鏡像可以提高項目構建效率。
settings.xml 中配置鏡像
<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的倉庫時,就會轉到對應的鏡像url中請求對應的資源。一般鏡像都是和私服結合使用。由于私服可以代理任何外部的公共倉庫(包括中央倉庫),因此,對于組織內部的Maven用戶來說,使用一個私服地址就等于使用了所有需要的外部倉庫,這個可以將配置集中到私服,從而簡化Maven本身的配置。在這種情況下,任何需要的構件都可以從私服中獲得,私服就是所有倉庫的鏡像。這猴子那個鏡像如下配置:
<mirrors> <mirror> <id>mirrorId</id> <mirrorOf>*</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> </mirrors>
10 倉庫中jar包搜索
1)倉庫搜索:
2)中央倉庫
http://repo1.maven.org/maven2/
http://repository.jboss.com/maven2/
http://repository.sonatype.org/content/groups/public/