0

我有 Nexus 服务器和团队内共享的 Maven 用户设置,其中包含

  <mirrors>
      <mirror>
      <!--This sends everything else to /public 
      http://www.sonatype.com/books/nexus-book/reference/maven-sect-single-group.html
      -->
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://192.168.16.232:8081/nexus/content/groups/public</url>
    </mirror>    
  </mirrors>

这就是在 pom.xml 中定义的所有存储库(包括默认的 Maven Central)都由 Nexus 提供服务。

在 Nexus 中,新的存储库被添加到公共组中。

Nexus 公共组

问:有没有更好的方法?目前其他开发人员不了解 Nexus+Maven 交互,并且当 pom.xml 中定义了新的存储库(不是由 Nexus 代理)时,maven 只会说“无法获取工件”。但不是“配置你的 Nexus 服务器” :) 其次,我发现一些公共存储库也从其他一些存储库缓存,所以最后,我不能确定这个 jar 到底来自哪里。

更新:我正在寻找最漂亮、简单、易于解释和理解的解决方案。

4

2 回答 2

1

我将根据我最近的经验给出一些想法,但我的感觉是,您应该确保您对构建以及各个组与它的交互有明确的要求,并推动构建环境的设计从那些真正的要求。

提示。

1)我不会把镜像放在 CI 构建服务器上的任何地方。通知开发人员,他们可以从他们想要的本地开发框中的任何地方提取,但是当他们签入时,如果无法从 CI 引用的关系中找到依赖项,那么他们必须与您一起处理。这将责任推给了他们。

2)这是很多存储库。我会考虑不正式引用这么多公共回购。我对那些回购特别了解不多,但有很多东西。听起来你正在经历重复。但是,您的公共组配置会告诉您 jar 来自何处;该配置中存储库的顺序将确定 jar 的来源。所以,它总是从它找到它的第一个地方拉。

于 2013-01-29T16:28:03.997 回答
1

这实际上是我们在我工作的地方完成它的确切方式。我们镜像了大约 30 个公共回购,这是最简单的方法。开发人员都使用我们的 nexus 安装作为一站式购物,当我们需要添加东西时,它只会显示在公共存储库中。这样做还可以让我们更好地控制人们正在使用的工件,因为我们只包括我们想要允许的东西,而不是世界上的所有东西。

不过,我们确实有一个区别,我们有一个“仅发布”和“仅快照”存储库,而不是一个巨大的公共存储库。主要原因是我们可以有不同的缓存策略,但它在组织上也更好一些。

我在设置中遇到的唯一问题是,如果您尝试在不在网络(办公室或 vpn)上的情况下进行构建,则没有任何效果。我通过在本地保留 2 个 settings.xml 文件并在我需要的极少数情况下切换来解决这个问题。

于 2013-01-30T15:43:59.690 回答