2009-09-25 47 views
4

我想让Nexus(或Artifactory,我们还没有决定)存储一个工件的副本,当它从互联网上的公共存储库(如Maven Central)下载时。Nexus/Artifactory可以存储互联网Maven工件的副本吗?

基本上,如果你没有在你的本地仓库中使用jar,而且仓库管理员也没有它,我想问问仓库的仓库管理员,是否将它发送给我,然后存储它无论是在回购经理还是在本地回购中。然后,当另一个人向回购经理询问同一个罐子时,它会将其从回购管理器发送给他们,并将其保存在本地回购中,而无需击中Maven中心。

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

回答

5

Nexus具有代理库的概念,它几乎完全符合您的描述。详情请参阅本书的Proxying Public Repositories部分。

Artifactory有一个类似的功能,称为Virtual repositories

代理和缓存远程公共存储库可以通过减少公共Internet上的冗余下载来加速构建。如果组织中的开发人员需要下载Spring Framework 2.5版本并使用Nexus,则只需从远程存储库下载一次依赖项(以及依赖项的依赖项)即可。通过与互联网的高速连接,这可能看起来是一个小问题,但如果您不断要求开发人员下载数百兆第三方依赖项,真正的成本节省将是Maven需要的时间检查新版本的依赖关系,并通过公共互联网下载依赖关系。

您可以通过将您的存储库管理器设置为中央镜像来阻止您的Maven安装尝试连接到中央,然后将请求发送到您的存储库管理器。例如添加以下Maven的settings.xml中的<mirrors>部分请求中央重定向到您的存储库管理:

<mirror> 
    <id>central-proxy</id> 
    <mirrorOf>central</mirrorOf> 
    <url>http://myrepo/nexus/content/groups/public</url> 
</mirror> 

我倾向于建立一个repository group包含多个远程仓库。就我的Maven安装而言,该组充当单个存储库,但会整理来自多个远程存储库的工件。

+0

我的maven安装似乎是从我的Nexus安装中获取maven中央回购站,但是我看不到在服务器上缓存的任何内容。我从默认安装中更改的唯一情况是告诉Maven Central代理下载MC索引。 – 2009-10-02 20:26:29

+0

如果您已将镜像设置为指向公共组,则应在“Maven Central”存储库下方看到下载的工件。你没看到吗? – 2009-10-02 21:30:44

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> 
1

在Artifactory的,你可以使用“首页 - > Maven的设置”页面,下载一个maven的设置,将强制Maven来使用你选择只Artifactory的虚拟存储库。这与虚拟存储库中的存储库参考清理相结合将确保您永远不会查询maven central。

您的NetBeans问题可以通过在您的Maven安装中强制执行repo声明来解决。上次我使用NetBeans Maven支持时,我还指定了一个项目级settings.xml文件来涵盖每种情况。

侧面注意:使用mirrorOf功能非常粗鲁,可能会导致奇怪的行为。

相关问题