我想让Nexus(或Artifactory,我们尚未决定)在从互联网上的公共存储库(如Maven Central)下载工件时存储工件的副本。
基本上,如果你的本地仓库中没有jar,而repo管理器也没有,我想向repo manager询问jar,让它发送给我,然后将它们存储起来在回购经理和我当地的回购。然后,当另一个人要求回购经理提供同一个罐子时,它会从回购经理发送给他们并将它们保存在他们的本地仓库中,而不需要点击Maven中心。
这听起来好像应该如何开箱即用,但我没有看到它。我可以通过repo管理器在Maven中心看到工件,但是当我使用Netbeans为我的项目添加依赖项时,它会直接从Maven中心下载(显然)。在repo管理器中没有任何东西被缓存(据我所知)。
答案 0 :(得分:5)
Nexus具有代理存储库的概念,它几乎完全按照您的描述进行操作。有关详细信息,请参阅本书的Proxying Public Repositories部分。
Artifactory具有类似的功能Virtual repositories。
通过减少公共互联网上的冗余下载,代理和缓存远程公共存储库可以加快构建速度。如果组织中的开发人员需要下载Spring Framework 2.5版并且您正在使用Nexus,则只需要从远程存储库下载一次依赖项(以及依赖项的依赖项)。通过高速连接到Internet,这似乎是一个小问题,但如果您不断要求开发人员下载数百兆字节的第三方依赖项,那么实际节省的成本将是Maven需要的时间。检查新版本的依赖项并通过公共Internet下载依赖项。
您可以通过将存储库管理器设置为中央镜像来阻止Maven安装尝试连接到Central,然后将对Central的请求定向到您的存储库管理器。例如,将以下内容添加到Maven的settings.xml的<mirrors>
部分,以将请求重定向到您的存储库管理器的中心:
<mirror>
<id>central-proxy</id>
<mirrorOf>central</mirrorOf>
<url>http://myrepo/nexus/content/groups/public</url>
</mirror>
我倾向于设置一个包含多个远程存储库的repository group。就我的Maven安装而言,该组充当单个存储库,但整理来自多个远程存储库的工件。
答案 1 :(得分:2)
来自其他公共存储库的代理和缓存工件确实(或应该)内置于任何体面的企业存储库管理器中。在企业环境中,即使公共存储库出现故障,开发团队也应该能够开发和构建他们的软件。这是一个非常基本的用例,也是使用公司存储库的原因之一(不依赖于您无法控制的公共资源)。
安装并配置存储库管理器后,您需要配置maven以检查存储库而不是公共存储库。为此,请在~/.m2/settings.xml
中修改镜像设置(由Rich指出)。有关更多详细信息,请参阅Nexus Book的3.2. Configuring Maven to Use a Single Nexus Group 部分(该配置适用于任何存储库管理器)。
在企业环境中,我更倾向于强制Maven使用单个存储库,使其镜像所有存储库请求。为此,请将mirrorOf
设置为*
。
<settings>
...
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<name>Maven Repository Manager running on repo.mycompany.com</name>
<url>http://repo.mycompany.com/proxy</url>
</mirror>
</mirrors>
...
</settings>
答案 2 :(得分:1)
在Artifactory中,您可以使用“Home-&gt; Maven设置”页面下载maven设置,该设置将强制maven仅使用您选择的Artifactory虚拟存储库。这与虚拟存储库中的存储库引用清理相结合,将确保您永远不会查询maven central。
您的NetBeans问题可以通过在Maven安装中强制执行repo声明来解决。我最后一次使用NetBeans Maven支持时,还指定了一个项目级settings.xml文件来覆盖每个案例。
旁注:使用mirrorOf功能非常粗鲁,可能会导致奇怪的行为。