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

原文地址:https://www.cnblogs.com/lddbupt/p/5536954.html