Maven中的倉庫用來存放生成的構建和各類依賴。嚴格說來只有兩種倉庫:本地和遠程。本地倉庫指本機的一份拷貝,用來緩存遠程下載、包含你還沒有發佈的臨時構件。html
遠程倉庫指經過各類協議如file://和http://訪問的其它類型的倉庫。這些倉庫多是第三方搭建的真實的遠程倉庫,用來提供他們的構件下載(例如repo.maven.apache.org和社區的maven.oschina.net/都是Maven的中央倉庫)。其它「遠程」倉庫多是你的公司擁有的創建在文件或HTTP服務器上的內部倉庫,用來在開發團隊間共享私有構件和管理髮布。apache
本地和遠程倉庫有着相同的結構,因此腳本能夠很容易地在兩邊運行,或同步倉庫供離線使用。不過,通常狀況下,倉庫內部的佈局對Maven用戶是徹底透明的。緩存
不推薦將jar存儲到CVS。Maven強調用戶本地倉庫的概念,在本地倉庫中jar或其它任何工程構件能夠被存儲和任意構建使用。許多工程依賴共同的組件如XML解析器和標準實用工具等,典型的構建中這些會重複複製,使用Maven這些標準組件能夠在本機存儲並被任意構建共享使用。安全
這樣作有如下優勢:服務器
通常來講,對本地倉庫什麼都不用作,除非磁盤空間不足而刪除它(或徹底清除以從新下載所有)。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可能須要在構建中加入擴展。