我正在开发一个大型项目,该项目有很多依赖项,其中许多是快照依赖项。而且由于快照依赖项,构建需要花费大量时间(大约一个小时),因为即使快照版本没有更改,它也需要检查每个依赖项是否在远程 Artifact 中更新。对于发行版本,没有问题,因为只有更新版本后才检查远程,否则使用 .m2 中的本地可用 jar。
与上述场景相比,如果我在本地 .m2 中拥有可用的所有依赖项时使用 -o 标志进行离线构建,则构建只需要大约 5-10 分钟,这可以节省大约 40-45 分钟的构建时间时间。但由于项目很大并且有很多人正在处理它,每当我拉出更改时,可能会有一些代码更改,这需要最新的快照和离线构建中断,因为即使是单个不匹配也可能导致构建中断。
为了解决这个问题,我正在考虑以下方法: 1. 始终使用 -o 标志进行离线构建。 2.创建一些外部脚本(可能在nodejs中),如果pom中给出的依赖项在远程 Artifact 上更新,它将定期进行扫描。如果是,则拉入本地 .m2,否则不执行任何操作。
有没有更好的替代方案? 另外,一旦我弄清楚要更新哪个 Artifact ,我可以使用什么方法强制仅更新该特定 Artifact 而无需传递依赖项? 使用上述方法,如果任何传递依赖项发生更改,仍然有可能导致构建中断,但这种情况不会经常发生,在这种情况下我必须运行完整的在线构建。
我考虑过设置本地代理 Artifact 服务器,但在这种情况下它没有帮助,因为对于快照解析,它会以任何方式转到远程存储库。如果我将缓存时间保持更长的时间,就有可能再次丢失更改和构建中断。
最佳答案
您可以控制快照检查:
Download policy
updatePolicy String The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or "never" (only if it doesn't exist locally).
https://maven.apache.org/ref/3.6.3/maven-settings/settings.html#class_snapshots
但是您可能还有其他问题,因为下载 Artifact 浪费了 45 分钟的构建时间。
关于java - 如何自动更新本地maven存储库.m2文件夹以进行离线构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004489/