Maven倉庫介紹
倉庫介紹
倉庫
Maven中的倉庫用來存放生成的構建和各種依賴。嚴格說來隻有兩種倉庫:本地和遠程。本地倉庫指本機的一份拷貝,用來緩存遠程下載、包含你尚未發布的臨時構件。
遠程倉庫指通過各種協議如file://和https://訪問的其它類型的倉庫。這些倉庫可能是第三方搭建的真實的遠程倉庫,用來提供他們的構件下載(例如repo.maven.apache.org和uk.maven.org是Maven的中央倉庫)。其它“遠程”倉庫可能是你的公司擁有的建立在文件或HTTP服務器上的內部倉庫,用來在開發團隊間共享私有構件和管理發布。
本地和遠程倉庫有著相同的結構,所以腳本可以很容易地在兩邊運行,或同步倉庫供離線使用。不過,一般情況下,倉庫內部的布局對Maven用戶是完全透明的。
為什麼不把JAR存在CVS?
不推薦將jar存儲到CVS。Maven強調用戶本地倉庫的概念,在本地倉庫中jar或其它任何工程構件可以被存儲和任意構建使用。許多工程依賴共同的組件如XML解析器和標準實用工具等,典型的構建中這些會重複複製,使用Maven這些標準組件可以在本機存儲並被任意構建共享使用。
這樣做有以下優點:
- 更少的存儲 – 當一個倉庫非常大的時候,由於每個JAR隻存儲一份它實際上節省了空間,盡管看起來不是這樣。(譯者注:倉庫通常很大很占空間,但存儲一份JAR相比存儲多份確實節省了空間)
- 檢出工程更快 – 如果CVS中沒有大的二進製文件,對工程的初次檢出或微小更新會更快。盡管這些是不得不下載的,但隻需要一次,如果某些常用的JAR包已存在就不需要再次下載。
- 不需要版本 – CVS和其它源碼控製係統為版本管理而設計,而外部依賴一般不會改變,或在改變時會同時改變文件名表示版本變化。在CVS中存儲這些比起在本地存儲並無額外的好處。
使用倉庫
一般來說,對本地倉庫什麼都不用做,除非磁盤空間不足而刪除它(或完全清除以重新下載全部)。
遠程倉庫用來下載或上傳(如果有權限)。
從遠程倉庫下載
工程聲明了一個本地倉庫中沒有的依賴時會觸發下載(或者對SNAPSHOT,如果遠程倉庫包含新版本時)。Maven默認從中央倉庫下載依賴。
要覆蓋這一設置,你需要指定鏡像,參見Using Mirrors for Repositories。
可以在settings.xml中設置全局鏡像,但要注意在工程的pom.xml中指定倉庫也是普遍的,settings.xml的設置會優先生效。如果找不到依賴,檢查是否覆蓋了遠程倉庫。
更多關於依賴的信息,參考Dependency Mechanism。
使用中央倉庫的鏡像
官方倉庫有數個位於不同地理位置的分布。可以修改settings.xml使用一個或多個鏡像。操作指南參見 Using Mirrors for Repositories。
離線構建
如果你暫時從互聯網斷開了,仍需要構建工程,可以在命令行中使用離線開關:
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>https://myserver/repo</url> </repository> </repositories> ... </project>
如果你的內部倉庫需要認證,在settings文件中使用id元素指定登錄信息。
部署到內部倉庫
使用內部倉庫的最重要原因之一是將自己的私有包發布出來共享。
要發布到倉庫,你需要通過SCP,SFTP,FTP,WebDAV或文件係統之一訪問倉庫。連接通過各種wagons實現,有些wagon可能需要在構建中加入擴展。
最後更新:2017-05-19 16:37:50