关于Maven2存储库镜像的问题

时间:2009-12-17 02:02:49

标签: maven-2

我使用Apache Archiva建立了一个Maven 2存储库(调用'dev存储库'),它存放了我的私有项目的工件。

如果我构建了我自己项目的工件,比如说group1:cat,而cat依赖于{group1:dog,commons:collection}。 group1:cat和group1:dog位于dev存储库中,commons:集合在Central中。

现在,当我构建group1:cat时,maven将获取group1:dog和commons:collection,问题是maven将始终在dev存储库和中央存储库中搜索以查找依赖项,但我想要的是搜索group1 :只在dev存储库中存储,并且搜索公共:仅在中央存储库中收集。我有中央镜像说中央镜像1和中央镜像2,所以如何配置maven所以它将搜索公共:集合在默认的中央存储库和中央镜像1,2等,并且不会打扰我的开发者存储库?

2 个答案:

答案 0 :(得分:1)

我的设置使用我的本地Archiva实例代理中心(以及其他第三方存储库)。在我的超级pom中,我已将我的存储库更改为仅指向我当地的Archiva,而不是搜索中心。一切都通过我的本地代理进入。

这不是你所要求的,但我认为这是一个合适的设置。

然后,您可以使用Archiva的黑/白名单来告诉它搜索内容的位置。

答案 1 :(得分:1)

  

(...)我想要的是它只搜索group1:dog in dev存储库,并搜索commons:仅在中央存储库中收集。

我不知道如何实现这一点,我认为这是不可能的。 maven怎么能知道给定工件的“源”存储库?

但实际上,为什么不让一切都通过Archiva?对于所有请求,不使用Archiva有什么意义?如果你不希望maven检查两个存储库的依赖关系,那么这似乎是一个非常明显的解决方案。此外,人们通常不希望直接依赖于企业环境中的中心(例如,如果它失败,你就不能再工作了)。不,真的,我不明白。

所以,我只是将Archiva声明为mirrorOf所有存储库,如下所示:

<settings>
  ...
  <mirrors>
    <mirror>
      <id>internal-repository</id>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>