maven - 如何优先使用多个 Maven 本地存储库
问题描述
我想知道是否有任何关于按顺序使用多个本地存储库的解决方法。
例子 :
默认本地存储库:~/.m2/repository
工作存储库:/var/tmp/m2LocalRepo
运行 Maven 时,为了解决依赖关系,我首先希望它在找不到工件时/var/tmp/m2LocalRepo
查找它,它会在默认工件中查找。
存在问题MNG-3655 – 允许多个本地存储库讨论相同的问题但尚未解决。
更新
我的用例如下:
- 一个应用程序由 2 个 maven 项目表示
projectA
,projectB
它们具有相同的版本。 projectB
是一个依赖projectA
- 在开发新功能时,我们会在每个项目上创建一个同名的开发分支。但是,我们不修改与主分支保持相同的版本号。
- 在构建期间,例如在 Jenkins 上,我想先构建,
projectB
但将其工件安装在另一个本地存储库(例如,/var/tmp/m2LocalRepo
)而不是默认存储库中,以免破坏也依赖于projectB
. 然后,在构建期间projectA
,我希望它从本地存储库中获取projectB
依赖项和其他依赖项。/var/tmp/m2LocalRepo
解决方案
重新“在构建期间,例如在 Jenkins 上”:
Jenkins Maven 项目有一个选项Build → Advanced...→ ☑使用私有 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。
推荐阅读
- reactjs - 如何使用 Reactjs 正确实现 div 消息的 scrollHeight 或 scrollTop
- r - 如何在 R 中使用逻辑回归找到 c-ctatistic 或 AUROC?
- c++ - C++ 破承诺异常
- reactjs - 如何使用 Redux Toolkit(使用 TypeScript)解决“AsyncThunkAction”类型中缺少“属性”类型?
- css - 为什么 align-self: flex-end css 属性在 flex div 上不起作用?
- pyspark - Pyspark:如何用数组中的值替换每一行的值
- javascript - 如何使用 Bootstrap4 日期时间选择器允许时间间隔
- jquery - 在 WooCommerce 预订日历中使用 jQuery 获取选定日期
- android - Android:模拟滚动事件到底层屏幕
- javascript - 在 Windows 10 音量控制覆盖中显示视频元数据