Artifact Repositories
在maven中, repository 用來存儲構建工程和各種依賴.
嚴格上來說, 只有兩種類型的倉庫: 本地和遠程. 本地倉庫是指在你自己的機器上緩存遠程的下載, 同時也包含了你還沒有發布的臨時構建.
遠程倉庫指任意其他類型的倉庫, 可以通過多種協議來訪問, 比如 file:// 和 http:// . 這些倉庫可能是一個真正的遠程倉庫, 由第三方建立來支持下載他們的工程. 例如, repo.maven.apache.org 和 uk.maven.org 提供了maven的中心倉庫. 其他遠程倉庫可能是內部倉庫, 你的公司在一個文件或HTTP服務器上創建的, 用來在開發團隊之間共享和發布私有的工程.
本地和遠程倉庫以相同的方式組織. 所以腳本可以很輕松地在其他地方進行. 也可以同步用於離線使用. 通常的使用過程中, 倉庫的布局對用戶來說是透明的.
Why not Store JARs in CVS?
CVS, Version Control System. 版本控制系統. 用來記錄源文件的歷史信息,甚至二進制文件,媒體文件等. CVS可以協助一組人共同開發一個工程, 為文件沖突\合並提供了解決方案. (代碼統一管理, 沖突解決方案, 代碼權限管理, 版本發布和分支)
不推薦把你的JAR文件存儲到CVS中. Maven嘗試推廣這樣一個概念: 一個用戶的本地倉庫, 存儲的JAR文件或任意其他工程, 能夠被任意數目的構建共用. 很多工程的一些依賴, 比如xml解析器, 以及一些標准工具, 經常在典型構建中復用. 使用maven, 這些標准工具就可以存儲在你的本地倉庫中, 並且被任意數目的構建共享.
優勢如下:
- It uses less storage - 當一個倉庫非常大時, 由於每個JAR都只保存在一個地方, 它實際上節省了空間, 即使它可能看起來不是這樣.
- It makes checking out a project quicker - 初始校驗, 然后小幅度更新. 如果沒有很大的二進制文件存在於CVS中, 一個工程的速度會更快. 當他們需要重新下載時, 只會發生一次, 而且不需要下載一些已經存在的共用JAR.
- No need for versioning – CVS和其他源碼控制系統是為版本文件設計的, 但外部依賴一般不會改變. 或者, 他們為了明示新版本而以各種方式修改文件命名. 把它們存儲在CVS不會比保存在一個本地緩沖區中更有益.
Using Repositories
通常, 你應該不需要定期對一個本地倉庫做什么事情. 除了在你缺乏硬盤空間時清理它, 或完全擦除它, 如果你想重新下載所有東西的話. 而對於遠程倉庫, 他們可以供你下載和上傳.
Downloading from a Remote Repository
maven中的下載發生在: 一個工程聲明了一個本地倉庫中不存在的依賴, 或者對於一個快照snapshot, 當遠程倉庫包含了一個新版本時.
默認情況下, maven會從中央存儲庫下載.
為了避免這樣, 你需要指定一個鏡像, http://maven.apache.org/guides/mini/guide-mirror-settings.html
你可以在你的setting.xml文件中設置使用一個特定的鏡像, 但注意通常一個工程會在它們的pom.xml中自定義庫, 而你的settings會優先. 如果你發現依賴無法被發現, 檢查你是否覆蓋了遠程倉庫.
Using Mirrors for the Central Repository
有很多分布在不同地理位置的官方中央倉庫. 你可修改你的settings.xml文件, 使用一個或多個鏡像.
Building Offline
如果你需要離線構建你的工程, 你可以在命令窗口使用以下離線開關:
- mvn -o package
注意, 很多插件會支持這個離線設置, 而不執行需要連接網絡的其他操作. 例如, 解決javadoc鏈接和鏈接檢查網站.
Uploading to a Remote Repository
上傳是任意類型的遠程倉庫都支持的, 但你必須擁有權限. 為了能夠上傳到中央倉庫, 參考http://maven.apache.org/repository/index.html
Internal Repositories
當使用maven時, 尤其是在一個協作環境中, 考慮到安全\速度或帶寬問題, 連接到互聯網來下載依賴不太合適. 因此, 建立一個內部倉庫來存儲構件復本\發布私有構件就十分重要.
這樣一個內部倉庫可以通過使用HTTP或文件系統的方式來下載, 或使用SCP, FTP或文件復制等方式來上傳.
注意, 這個倉庫沒有什么特殊之處: 它是另一個遠程倉庫.
另外, 你可能想和你生成的項目站點共享這個倉庫服務器, 生成和發布站點, 參考http://maven.apache.org/guides/mini/guide-site.html
Setting up the Internal Repository
建立一個內部倉庫,只要求你有足夠的空間來存放它, 然后開始從遠程倉庫, 比如repo.maven.apache.org, 使用相同的布局來復制需要的構件,.
不推薦你抓取或 rsync:// 一個完整的復本, 因為有大量的數據, 這樣做將會導致你被禁. 你可以使用一個程序, 比如網頁http://maven.apache.org/repository-management.html 中給出的, 來運行你的內部倉庫服務, 從互聯網中按需下哉, 然后存儲這些構件在你的內部倉庫中.
另一個選擇是手動下載和發布, 然后復制到內部倉庫中, 或讓maven為一個用戶下載它們, 並且手動上傳新版本構件到內部倉庫. 這個步驟只可用於許可證禁止自動發布的構件, 比如sun提供的通用J2EE JARs. 參考http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html
Using the Internal Repository
使用內部倉庫非常簡單. 只需增加一個 repositories 元素.
如果你的內部倉庫要求認證, id元素可用在你的settings 文件中指定登錄信息.
Deploying to the Internal Repository
使用一個或多個內部倉庫的最重要原因之一, 是能夠發布你自己的私有版本.
為了發布到倉庫中, 你需要通過 SCP, SFTP, FTP , WebDAV, 或者文件系統. 連接是通過各種各樣的輪子完成了, 為了擴展你的構建, 可能需要添加一些輪子. 哈哈....
Reference
http://maven.apache.org/guides/introduction/introduction-to-repositories.html
http://maven.apache.org/guides/mini/guide-mirror-settings.html