【问题标题】:Maven multiple repositories -- how exactly does maven decide which repo to fetch which artifact?Maven 多个存储库——maven 究竟如何决定哪个存储库获取哪个工件?
【发布时间】:2015-05-14 16:56:14
【问题描述】:

我有一个项目需要从两个不同的存储库中获取工件。甚至存储库中的工件也相互依赖。例如,我的项目可能依赖于工件 A(在 repo 1 中),它依赖于工件 B(在 repo 2 中),它又取决于工件 C(再次在 repo 1 中)。

我在配置我的 settings.xml 以使其工作时遇到了很多麻烦(例如,mvn 总是尝试去 repo 1 获取工件 B,这是错误的)。有人知道这在 Maven 中是如何决定的吗?

【问题讨论】:

  • 我认为你的答案应该在这里的某个地方:maven.apache.org/guides/introduction/… ?
  • 你是如何配置你的 settings.xml 的?
  • @khmarbaise 我所做的一切都绝对是错误的。我很好奇maven是如何解决多存储库问题的
  • 我认为你无法控制它。 Maven 将按照您在 settings.xml 中定义的顺序在存储库中搜索,直到找到所需的内容。
  • 但事实并非如此!它在 repo 1 中查找,没有找到,然后放弃,据我所知,它甚至从未尝试查看 repo 2。什么给了?

标签: java maven dependencies


【解决方案1】:

按顺序搜索所有存储库。

没有发生这种情况的第一个原因是<mirror>s。镜像覆盖存储库定义。例如,如果您使用<mirrorOf>*</mirrorOf> 定义一个镜像,它将接受所有个请求,而您的其他存储库定义就不再重要了。

第二个原因是其中一个存储库出现问题。不包含工件的存储库应以404 回答。如果它返回一些乱码或500 错误或其他任何内容,这可能会破坏分辨率。

【讨论】:

  • 当你说“按顺序”时,这是什么顺序? settings.xml 中的那个?还是 pom 也会影响事情? (假设没有镜子)
  • 我不知道。再说一句:在公司内部,您通常不会将多个存储库放入 settings.xml,而是让您的 Nexus 或 Artifactory 完成繁重的工作。
  • 好吧,事实证明,在我的公司,我们有几个 Nexus 服务器,其中一些管理多个 repos。最后一个问题:根据您的解释,如果没有带镜像的游戏,也没有异常的服务器,那么删除存储库应该永远不会有帮助。它最多可以节省一点时间和网络流量,但如果某些东西还没有找到,它就永远无法找到它。对吗?
  • 那是我的理解,是的。对于一家公司,我的建议是代理另一个 Nexus,以便您的 settings.xml 只需要一个。但我知道你可能无法改变这一点。
  • 好吧,事情终于变得更有意义了。两个 repos 中都有一些工件,但是 pom 文件不匹配!所以我最终会得到一个完全不同的依赖树,具体取决于我选择的 pom。啊!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2015-04-24
  • 2018-02-20
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多