Maven-Repository


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

如果你需要離線構建你的工程, 你可以在命令窗口使用以下離線開關:

  1. mvn -o package

注意, 很多插件會支持這個離線設置, 而不執行需要連接網絡的其他操作. 例如, 解決javadoc鏈接和鏈接檢查網站.

Uploading to a Remote Repository

上傳是任意類型的遠程倉庫都支持的, 但你必須擁有權限. 為了能夠上傳到中央倉庫, 參考http://maven.apache.org/repository/index.html

image

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 元素.

image

如果你的內部倉庫要求認證, 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM