Nexus / Artifactory可以存储互联网Maven工件的副本吗?

时间:2009-09-25 15:56:02

标签: maven-2 netbeans repository nexus artifactory

我想让Nexus(或Artifactory,我们尚未决定)在从互联网上的公共存储库(如Maven Central)下载工件时存储工件的副本。

基本上,如果你的本地仓库中没有jar,而repo管理器也没有,我想向repo manager询问jar,让它发送给我,然后将它们存储起来在回购经理和我当地的回购。然后,当另一个人要求回购经理提供同一个罐子时,它会从回购经理发送给他们并将它们保存在他们的本地仓库中,而不需要点击Maven中心。

这听起来好像应该如何开箱即用,但我没有看到它。我可以通过repo管理器在Maven中心看到工件,但是当我使用Netbeans为我的项目添加依赖项时,它会直接从Maven中心下载(显然)。在repo管理器中没有任何东西被缓存(据我所知)。

3 个答案:

答案 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功能非常粗鲁,可能会导致奇怪的行为。