Maven倉庫介紹

何爲倉庫

Maven中的倉庫用來存放生成的構建和各類依賴。嚴格說來只有兩種倉庫:本地和遠程。本地倉庫指本機的一份拷貝,用來緩存遠程下載、包含你還沒有發佈的臨時構件。html

遠程倉庫指經過各類協議如file://和http://訪問的其它類型的倉庫。這些倉庫多是第三方搭建的真實的遠程倉庫,用來提供他們的構件下載(例如repo.maven.apache.org和社區的maven.oschina.net/都是Maven的中央倉庫)。其它「遠程」倉庫多是你的公司擁有的創建在文件或HTTP服務器上的內部倉庫,用來在開發團隊間共享私有構件和管理髮布。apache

本地和遠程倉庫有着相同的結構,因此腳本能夠很容易地在兩邊運行,或同步倉庫供離線使用。不過,通常狀況下,倉庫內部的佈局對Maven用戶是徹底透明的。緩存

爲何不把JAR存在CVS?

不推薦將jar存儲到CVS。Maven強調用戶本地倉庫的概念,在本地倉庫中jar或其它任何工程構件能夠被存儲和任意構建使用。許多工程依賴共同的組件如XML解析器和標準實用工具等,典型的構建中這些會重複複製,使用Maven這些標準組件能夠在本機存儲並被任意構建共享使用。安全

這樣作有如下優勢:服務器

  • 更少的存儲 – 當一個倉庫很是大的時候,因爲每一個JAR只存儲一份它實際上節省了空間,儘管看起來不是這樣。(譯者注:倉庫一般很大很佔空間,但存儲一份JAR相比存儲多份確實節省了空間)
  • 檢出工程更快 – 若是CVS中沒有大的二進制文件,對工程的初次檢出或微小更新會更快。儘管這些是不得不下載的,但只須要一次,若是某些經常使用的JAR包已存在就不須要再次下載。
  • 不須要版本 – CVS和其它源碼控制系統爲版本管理而設計,而外部依賴通常不會改變,或在改變時會同時改變文件名錶示版本變化。在CVS中存儲這些比起在本地存儲並沒有額外的好處。

使用倉庫

通常來講,對本地倉庫什麼都不用作,除非磁盤空間不足而刪除它(或徹底清除以從新下載所有)。maven

遠程倉庫用來下載或上傳(若是有權限)。ide

從遠程倉庫下載

工程聲明瞭一個本地倉庫中沒有的依賴時會觸發下載(或者對SNAPSHOT,若是遠程倉庫包含新版本時)。Maven默認從中央倉庫下載依賴。工具

要覆蓋這一設置,你須要指定鏡像,參見Using Mirrors for Repositories佈局

能夠在settings.xml中設置全局鏡像,但要注意在工程的pom.xml中指定倉庫也是廣泛的,settings.xml的設置會優先生效。若是找不到依賴,檢查是否覆蓋了遠程倉庫。網站

更多關於依賴的信息,參考Dependency Mechanism

使用中央倉庫的鏡像

官方倉庫有數個位於不一樣地理位置的分佈。能夠修改settings.xml使用一個或多個鏡像。操做指南參見 Using Mirrors for Repositories

離線構建

若是你暫時從互聯網斷開了,仍須要構建工程,能夠在命令行中使用離線開關:

1 mvn -o package

許多插件會判斷離線設置而不去鏈接互聯網,好比解析Javadoc連接和網站的連接檢查。

上傳到遠程倉庫

可能全部的遠程倉庫都要求必須有權限才能上傳。若要上傳到中央倉庫,參考Repository Center

內部倉庫

使用Maven,尤爲是在一家公司內,出於安全、速度或帶寬的緣由,鏈接到互聯網來下載依賴多是不能接受的。此時,創建一個內部倉庫來存放構件的拷貝和發佈私有構件是明智的。
從內部倉庫下載可使用HTTP或文件系統(使用file://),上傳可使用scp, ftp或文件拷貝。

注意只要是在Maven中,內部倉庫沒有任何特殊之處:它是另外一種遠程倉庫,包含可下載到用戶本地存儲的構件,同時是構件發佈的目的地。

此外,你可能想將生成的工程站點共享到倉庫,更多建立和部署站點的信息,參考Creating a Site

搭建內部倉庫

搭建內部倉庫只須要找一臺服務器存放它,而後拷貝須要的構件,使用與遠程倉庫如 repo.maven.apache.org一樣的目錄結構。

不推薦抓取或用rsync獲取整個中央倉庫的完整拷貝,數據量太大,並且這樣作會被禁。你可使用 Repository Management 中介紹的程序來運行內部倉庫服務,從互聯網按需下載並保存構件來提供更快的內部下載。

另外一種選擇是手動下載和檢查發佈包,拷貝到內部倉庫,或經過Maven下載以後手動上傳確認過的構件到用做發佈的內部倉庫。這一操做對禁止自動分發的構件是惟一可行的方式,如Sun提供的J2EE jar包。查看 Guide to coping with SUN JARs瞭解更多。

值得一提的是,Maven將來計劃包含對這些特性的加強支持,包括下載時自動點擊許可和簽名驗證。

使用內部倉庫

使用內部倉庫很簡單,增長一個repositories元素:

<project>
  ...
  <repositories>
    <repository>
      <id>my-internal-site<id>
      <url>http://myserver/repo</url>
    </repository>
  </repositories>
  ...
</project>

若是你的內部倉庫須要認證,在settings文件中使用id元素指定登陸信息。

 

9、部署到內部倉庫

使用內部倉庫的最重要緣由之一是將本身的私有包發佈出來共享。

要發佈到倉庫,你須要經過SCP,SFTP,FTP,WebDAV或文件系統之一訪問倉庫。鏈接經過各類wagons實現,有些wagon可能須要在構建中加入擴展。

相關文章
相關標籤/搜索