【发布时间】: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