首页 > 解决方案 > 如何优先使用多个 Maven 本地存储库

问题描述

我想知道是否有任何关于按顺序使用多个本地存储库的解决方法。

例子 :

默认本地存储库:~/.m2/repository

工作存储库:/var/tmp/m2LocalRepo

运行 Maven 时,为了解决依赖关系,我首先希望它在找不到工件时/var/tmp/m2LocalRepo查找它,它会在默认工件中查找。

存在问题MNG-3655 – 允许多个本地存储库讨论相同的问题但尚未解决。

更新

我的用例如下:

标签: mavenmaven-3

解决方案


重新“在构建期间,例如在 Jenkins 上”:

Jenkins Maven 项目有一个选项BuildAdvanced...→ ☑使用私有 Maven 存储库及其内联帮助:

通常,Jenkins 使用由 Maven 确定的本地 Maven 存储库——确切的过程似乎没有记录,但它~/.m2/repository可以并且可以被 in 覆盖~/.m2/settings.xml(有关更多详细信息,请参阅参考资料。)

这通常意味着在同一节点上执行的所有作业共享一个 Maven 存储库。这样做的好处是可以节省磁盘空间,但缺点是有时这些构建可能会相互干扰。例如,您可能最终导致构建错误地成功,只是因为您在本地存储库中拥有所有依赖项,尽管事实上 POM 中的任何存储库都没有它们。

还有一些关于让并发 Maven 进程尝试使用相同的本地存储库的问题。

选中此选项后,Jenkins 将告诉 Maven$WORKSPACE/.repository用作本地 Maven 存储库。这意味着每个作业都将获得自己独立的 Maven 存储库。它以额外的磁盘空间消耗为代价解决了上述问题。

使用此选项时,请考虑设置一个 Maven 工件管理器,这样您就不必经常访问远程 Maven 存储库。

如果您希望在 Jenkins 上执行的所有 Maven 作业中激活此模式,请参阅此处描述的技术。

和选项:

  • 默认 ...
  • 执行者的本地
  • 本地到工作区

您可以projectB使用 Maven 资源插件(如 Maven 的这个答案中所述,如何复制文件?projectA按需将 's 的工件复制到 's 本地 repo。


推荐阅读