存储库简介
工件存储库
Maven 中的存储库包含不同类型的构建工件和依赖项。
有两种类型的存储库:本地和远程:
- 本地存储库是运行 Maven 的计算机上的一个目录。它缓存远程下载并包含您尚未发布的临时构建工件。
- 远程存储库是指任何其他类型的存储库,可通过各种协议(例如
file://
和https://
. 这些存储库可能是由第三方设置的真正远程存储库,以提供其工件以供下载(例如,repo.maven.apache.org)。其他“远程”存储库可能是在您公司的文件或 HTTP 服务器上设置的内部存储库,用于在开发团队之间共享私有工件并用于发布。
本地和远程存储库的结构相同,因此脚本可以在任一端运行,也可以同步以供离线使用。然而,存储库的布局对 Maven 用户是完全透明的。
使用存储库
通常,您不需要定期对本地存储库进行任何操作,除非在磁盘空间不足时将其清除(如果您愿意再次下载所有内容,则将其完全擦除)。
对于远程存储库,它们用于下载和上传(如果您有权这样做)。
从远程存储库下载
在 Maven 中的下载是由一个项目触发的,该项目声明了本地存储库中不存在的依赖项(或者对于 a SNAPSHOT
,当远程存储库包含较新的存储库时)。默认情况下,Maven 将从中央存储库下载。
要覆盖它,您需要指定 a mirror
,如Using Mirrors for Repositories中所示。
您可以在settings.xml
文件中设置它以全局使用某个镜像。但是,项目通常会在其中自定义存储库,pom.xml
并且您的设置将优先。如果未找到依赖项,请检查您是否未覆盖远程存储库。
有关依赖关系的更多信息,请参阅依赖机制。
为中央存储库使用镜像
有几个地理分布的官方中央存储库。您可以更改settings.xml
文件以使用一个或多个镜像。这方面的说明可以在指南Using Mirrors for Repositories中找到。
离线构建
如果您暂时断开了与 Internet 的连接,并且需要离线构建您的项目,您可以使用 CLI 上的离线开关:
mvn -o package
许多插件支持离线设置并且不执行任何连接到互联网的操作。一些示例是解析 Javadoc 链接和链接检查站点。
上传到远程存储库
虽然这对于任何类型的远程存储库都是可能的,但您必须具有这样做的权限。要让某人上传到中央 Maven 存储库,请参阅存储库中心。
内部存储库
在使用 Maven 时,尤其是在企业环境中,出于安全、速度或带宽的原因,连接到 Internet 以下载依赖项是不可接受的。出于这个原因,最好设置一个内部存储库来存放工件的副本,并将私有工件发布到。
这种内部存储库可以使用 HTTP 或文件系统(带有file://
URL)下载,并使用 SCP、FTP 或文件副本上传。
就 Maven 而言,此存储库没有什么特别之处:它是另一个远程存储库,其中包含要下载到用户本地缓存的工件,并且是工件发布的发布目的地。
此外,您可能希望与生成的项目站点共享存储库服务器。有关创建和部署站点的更多信息,请参阅创建站点。
设置内部存储库
要建立一个内部存储库,只需要您有一个放置它的地方,然后使用与远程存储库(例如repo.maven.apache.org )相同的布局复制所需的工件。
不建议您抓取或完整副本中央,因为rsync://
那里有大量数据,这样做会被禁止。您可以使用存储库管理页面中描述的程序来运行内部存储库的服务器,根据需要从 Internet 下载,然后将工件保存在内部存储库中以便以后更快地下载。
其他可用的选项是手动下载和审查发布,然后将它们复制到内部存储库,或者让 Maven 为用户下载它们,然后手动将审查过的工件上传到用于发布的内部存储库。此步骤是唯一可用于许可证自动禁止分发的工件,例如 Sun 提供的几个 J2EE JAR。有关更多信息,请参阅处理 SUN JAR文档的指南。
应该注意的是,Maven 打算在未来包括对此类功能的增强支持,包括点击下载许可证和签名验证。
使用内部存储库
使用内部存储库非常简单。只需进行更改以添加repositories
元素:
<project> ... <repositories> <repository> <id>my-internal-site</id> <url>https://myserver/repo</url> </repository> </repositories> ... </project>
如果您的内部存储库需要身份验证,则id
可以在您的设置文件中使用该元素来指定登录信息。
部署到内部存储库
拥有一个或多个内部存储库的最重要原因之一是能够发布您自己的私有版本。
要发布到存储库,您需要通过 SCP、SFTP、FTP、WebDAV 或文件系统之一进行访问。连接是通过各种货车实现的。一些货车可能需要作为扩展添加到您的构建中。