【问题标题】:How to auto-update local maven repository .m2 folder for offline build如何自动更新本地 Maven 存储库 .m2 文件夹以进行离线构建
【发布时间】:2020-01-31 13:02:00
【问题描述】:

我正在处理一个有很多依赖项的大型项目,其中许多是 SNAPSHOT 依赖项。而且由于快照依赖关系,构建需要大量时间(大约一个小时),因为它需要检查每个依赖项是否在远程工件中更新,即使快照版本没有更改。对于发布版本,没有问题,因为只有更新版本然后才检查远程,否则使用来自 .m2 的本地可用 jar。

与上述方案相比,如果我在本地 .m2 中拥有所有可用依赖项时使用 -o 标志进行离线构建,则构建只需大约 5-10 分钟,从而节省大约 40-45 分钟的构建时间时间。但是由于项目很大,而且很多人都在做,所以每当我拉取更改时,可能会有一些代码更改需要最新的快照和离线构建中断,因为即使一个不匹配也可能导致构建中断。

所以为了解决这个问题,我正在考虑以下方法: 1. 始终使用 -o 标志离线构建。 2. 创建一些外部脚本(可能在 nodejs 中),如果 pom 中给出的依赖项在远程工件上更新,它将定期继续扫描。如果是,则拉入本地 .m2,否则什么也不做。

还有什么更好的选择吗? 此外,一旦我确定要更新哪个工件,我可以使用什么方式强制仅更新该特定工件而无需传递依赖? 使用上述方法,如果任何传递依赖项发生更改,仍然有可能构建中断,但这不会经常发生,在这种情况下我将不得不运行完整的在线构建。

我考虑过设置本地代理工件服务器,但在这种情况下它无济于事,因为快照解析它会以任何方式转到远程存储库。如果我将缓存时间保持得更久,那么再次丢失更改和构建中断的机会。

【问题讨论】:

  • 这很奇怪。如果下载依赖项需要 45 分钟,则说明有问题。即使在糟糕的情况下,几分钟就足够了。要么你有数千个依赖项(这很糟糕),要么你的互联网连接很糟糕。
  • 考虑在 docker 中运行本地 Maven 存储库并让它处理更新?

标签: java maven artifactory


【解决方案1】:

您可以控制快照检查:

下载政策

updatePolicy String 下载更新的频率 - 可以是 “总是”、“每天”(默认)、“间隔:XXX”(以分钟为单位)或“从不” (仅当它在本地不存在时)。

https://maven.apache.org/ref/3.6.3/maven-settings/settings.html#class_snapshots

但您可能还有其他问题,因为在下载工件上浪费了 45 分钟的构建时间。

【讨论】:

  • 我已经在这样做了,但这并不能解决主要问题。如果更新间隔没有达到构建可能是使用过时的快照,可能导致构建失败。或者在构建过程中,它会花费大量时间来检查工件服务器是否有更新的快照。这就是我想要离线构建的原因。
  • 如果您绝对需要超级最新的“快照”版本的外部库,那么没有解决方案 - maven 应该每次都下载它们。但通常人们将“快照”版本保留至少一天,这对于日常构建来说已经足够了。
猜你喜欢
  • 2019-01-09
  • 1970-01-01
  • 2017-04-04
  • 2016-10-25
  • 2019-11-24
  • 2011-02-04
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
相关资源
最近更新 更多