第五節:Maven倉庫(上)

倉庫的分類:本地倉庫和遠程倉庫。
     當Maven需要構件的時候,會首先查看本地倉庫,如果本地倉庫有此構件,則直接使用;如果本地倉庫沒有,或者需要查看更新的構件版本,Maven就會從遠處倉庫查找,下載到本地後再使用。
     中央倉庫是Maven核心自帶的遠程倉庫,本地倉庫默認是從中央倉庫下載構件的。私服是另一種特殊的遠程倉庫,是在局域網內架設的一個私有的倉庫服務器,用其代理所有對外部倉庫的訪問,內部的項目還能部署到私服上供其他項目使用。
     除了中央倉庫和私服,還有很多其他公開的遠程倉庫。所以關係圖如下:
本地倉庫:默認情況下,不管是在window還會linux上,每個用戶在自己的用戶目錄下都有一個路徑名爲./m2/respority/的倉庫目錄,這就是本地倉庫的位置。
     用戶也可以自定義本地倉庫的目錄地址,編輯./m2/settings.xml文件,設置localRepository元素的值爲想要的倉庫地址。
     我們通過man clean install指令將我們的自己編寫的構件發佈到本地倉庫中供其他項目使用。
     對於Maven來說,每一個用戶只有一個本地倉庫,但可以配置訪問很多遠程倉庫。

中央倉庫:中央倉庫是默認的遠程倉庫,包含了世界上絕大多數流行的開源Java構件,以及源碼,作者信息,許可證信息等,一般來說,一個簡單的Maven項目所需依賴的全部構件都可以從中央倉庫下載到,

私服:一種特殊的遠程倉庫,他是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用,當Maven需要下載構件的時候,他會從私服請求,如果私服中不存在此構件,則從外部的遠程倉庫下載,緩存在私服上之後,再爲Maven的下載提供請求,另外一些無法從外部倉庫下載到的構件也能從本地上傳到私服供大家一起使用。


     建立私服的好處:
  • 節省自己的外網帶寬:對於一個有多個Maven用戶的團隊來說,建立私服後,對外的重複構件的下載得以消除,比如說一個構件A,團隊有10個用戶都需要將其下載到自己的本地倉庫,沒有私服的情況下,每個人都需要從外部倉庫下載10次,但是如果建立了私服,只需要從外部倉庫下載一次構件A到私服,用戶就可以通過局域網高速下載構件,節省外網帶寬。
  • 加速Maven的構建:Maven的一些內部機制,比如快照檢查機制(就是指不穩定版本)會要求Maven在構建項目的時候不停檢查遠程倉庫,以獲取最新快照版本的構件,當項目配置了很多遠程倉庫或者很多快照版本的構件時,項目的構件速度會大大降低。使用私服時,Maven只需檢查局域網內私服的數據(關於私服上構件版本的更新和維護是需要配置的,後面會介紹),構建的速度大大提升。
  • 部署第三方構件:當某個構件無法從外部倉庫獲得,或者由於一些版權因素無法發佈到公共倉庫的構件,或者是組織內部的私有構件,使用私服可以解決問題。
  • 提高穩定性,增強控制:Maven項目的構建高度依賴於遠程倉庫,因此一旦網絡不穩定,Maven構建過程中可能出現下載構件失敗導致項目構建的情況,使用私服後,即使沒有網絡,因爲已經緩存了大量構件,項目構建仍可以正常進行。

遠程倉庫的配置:
     這裏配置的我們下載構件的遠程倉庫,配置在項目的POM文件中,在repositories元素下,使用 repository元素聲明一個或者多個遠程倉庫,repository下有幾個元素:
  • id:任何一個倉庫聲明的id必需是唯一的,Maven自帶的中央倉庫使用的id爲central,如果再聲明一個id爲central的遠程倉庫,就會覆蓋中央倉庫的配置。
  • url:倉庫的地址。
  • releases:控制對發佈版本的下載,由releases元素下的子元素<enabled>true/false</enabled>控制。
  • snapshots:控制對快照版本的下載,由releases元素下的子元素<enabled>true/false</enabled>控制。
     對於releases和snapshots元素來說,除了enabled,還包含其他兩個子元素updatePolicychecksumPolicy
  • updatePolicy:配置Maven從遠程倉庫檢查更新的頻率,默認值爲daily,表示每天檢查一次,其他的值有:never-從不檢查更新,always-每次構建的時候都檢查更新,inteval : X 表示每隔X分鐘就檢查一下更新。
  • checksumPolicy:當構件部署到Maven倉庫中時,同時會部署對應的校驗和文件,在下載這些構件的時候,我們會檢驗校驗和文件,如果校驗和驗證失敗怎麼辦,當checksumPolicy設置爲warn時,在構件項目的時候,會輸出警告信息。其他的值有:fail-Maven遇到檢驗和錯誤就讓構建失敗,ignore-使Maven完全忽略檢驗和驗證。
 

遠程倉庫的認證:
     出於安全考慮,我們有時候需要一些認證信息才能夠訪問遠程倉庫,配置認證信息跟配置遠程倉庫信息不同,倉庫信息可以配置在POM文件中,而認證信息則必須配置在當前用戶的settings.xml文件中,因爲POM是和構件一起被髮布到倉庫供所有成員訪問的,因此只有在本地的settings.xml文件中配置認證信息才更加安全。
     我們使用settings.xml文件中的servers元素以及server子元素來配置認證信息,主要是配置server下的幾個子元素:
  • id:必須與POM中需要認證的respority元素的id完全一致,正是這個id纔將認證信息與倉庫配置連在了一起。
  • username:認證用戶名
  • password:認證密碼
         

部署至遠程倉庫:
     私服的另一大作用就是部署第三方構件,包括組織內部生成的構件,這裏配置的是我們上傳構件的遠程倉庫,當使用mvn clean deploy 命令時我們就會把項目構件部署到我們配置的遠程倉庫上,而使用mvn clean install命令時是把項目發佈到本地的Maven倉庫中。
     我們需要配置的是POM文件中的distributionManagement元素:
  • downloadUrl:一個URL,其他Maven項目可以通過該URL下載並引用當前Maven項目的構件。
  • status:這裏的狀態不要受到我們的設置,maven會自動設置project的狀態,至今爲止最經常的狀態,意思是製品是從maven2 instance部署的,
  • repository:表示發佈版本的倉庫。其中repository元素下又有幾個子元素
    • id:遠程倉庫的唯一標識。
    • name:爲了方便人閱讀。
    • url:遠程倉庫的地址。
  • snapshotRepository:表示快照版本的倉庫。 其中snapshotRepository元素的子元素同上。
     當我們往遠程倉庫部署構件的時候,往往也需要認證,配置的方式如上,即在settings.xml文件中創建一個server元素,其id與倉庫id匹配,其他配置如上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章