Maven學習筆記五【Repositories】
Maven中的儲存庫用於儲存不同型別的構建專案和依賴關係。
嚴格來講,只有兩種型別的儲存庫:本地儲存庫和遠端儲存。本地儲存庫指向本地的一個副本,該副本是遠端下載的快取,並且還包含尚未釋出的臨時構建專案。
遠端庫指的是任何其他型別的儲存庫,可以通過各種協議訪問如file://和http:// 。這些儲存庫可能是由第三方簡歷的真正遠端儲存庫,以提供可以下載的專案(例如Maven中央儲存庫)。其它“遠端”儲存庫可能是在公司內的檔案或HTTP伺服器上簡歷的內部儲存庫,用於在開發團隊和版本之間共享私有專案。
本地儲存庫和遠端儲存庫的結構是相同的,因此指令碼可以輕鬆地在任意一方執行,或者可以同步以便離線使用。但是,一般情況下,儲存庫的佈局對Maven使用者是完全透明的。
使用儲存庫
一般來說,不需要經常使用本地儲存庫做任何事情,除非在磁碟空間不足時清理它(或者如果願意再次下載所有內容,則完全刪除它)。
對於遠端儲存庫,它們用於下載和上傳(如果有許可權的話)。
從遠端庫下載
Maven中的下載由宣告本地儲存庫中不存在的依賴項的專案觸發(或者對於SNAPSHOT,當遠端儲存庫包含更新的依賴項時)。預設情況下,Maven將從中央儲存庫下載。
要覆蓋它,需要指定映象,下面會具體說明。
可以在settings.xml中將其設定為全域性使用某個映象,但是請注意,專案通常會在pom.xml中自定義儲存庫,並且settings.xml中的設定將優先處理。如果發現沒有找到依賴項,請檢查是否覆蓋了遠端儲存庫。
使用中央儲存庫映象
有幾個在地理上分佈的官方中央儲存庫。我們可以更改settings.xml來使用一個或多個映象。
離線構建
如果暫時與網路斷開連線,需要離線構建專案,可以使用CLI的offline開關:
mvn -o package
注意:許多外掛都支援離線設定,不會執行任何連結到網路的操作。比如,解析Javadoc連結和site連結檢查。
上傳到遠端儲存庫
雖然這對於任何型別的遠端儲存庫都是可能得,但是必須擁有許可權才行。
內部儲存庫
在使用Maven時,特別是在企業環境中,由於安全性、速度或頻寬等原因,連線到網路下載依賴項是不可接受的。出於這個原因,最好簡歷一個內部儲存庫來存放專案的副本,並將私有專案釋出到其中。
這樣的內部儲存庫可以使用HTTP或檔案系統(比如file:// URL),並使用SCP、FTP或檔案副本上傳。
注意,就Maven而言,這個儲存庫沒有什麼特別之處:它是另一個遠端儲存庫,其中包含要下載到本地快取的專案,並且是專案釋出的目的地。
此外,我們可能希望與生成的專案站點共享儲存伺服器,具體的後面再講。
設定內部儲存庫
要設定一個內部儲存庫,只需要有一個放置它的地方,然後使用與遠端庫(如epo.maven.apache.org)相同的佈局開始複製所需的專案。
不建議抓取或rsync://中央伺服器的完整副本,因為那裡有大量的資料,這樣做會被伺服器禁止訪問。可以使用儲存庫管理頁面中描述的程式來執行內部儲存庫的伺服器,根據需要從網路下載,然後將專案儲存在內部儲存庫中,以便稍候更快地下載。
其他可用的選項是手動下載和審查版本,然後將它們複製到內部儲存庫,或者讓Maven為使用者戶下載他們,然後手動將審查過的專案上傳到用於釋出的內部儲存庫。此步驟是唯一可用於許可證禁止自動分發專案的方式,例如Sun提供的幾個J2EEjar包。
應該注意的是, Maven打算在將來支援這些特性,包括在下載時單擊許可證和驗證簽名。
使用內部儲存庫
使用內部儲存庫非常簡單,新增如下更改就可以了:
<project> ... <repositories> <repository> <id>my-internal-site</id> <url>http://myserver/repo</url> </repository> </repositories> ... </project>
如果內部儲存庫需要身份驗證,可以在settings.xml中使用id元素來指定登陸資訊。
部署到內部儲存庫
擁有一個或多個內部儲存庫的重要原因之一是能夠分享我們自己的私有專案。要釋出到儲存庫,需要通過SCP、SFTP、FTP、WebDAV或檔案系統之一進行訪問。連線是通過各種包裝實現的。能需要新增一些工具作為構建的擴充套件。