我们的项目就像适用于大量不同其他库的适配器/外观接口。依赖关系以某种方式重叠,有时会发生冲突,有时甚至会使项目中断,因为错误版本的依赖项会提供相同接口的错误行为。 我们使用Ivy和Ant来进行基本的依赖关系管理。 在早期管理依赖关系和检测错误行为的最佳做法是什么?
答案 0 :(得分:2)
这个问题的重要部分是关于过程,而不是工具。
如果项目的依赖项归其他团队或第三方所有,则该项目必须明确接受每个新依赖项的每个新版本。允许依赖项自行升级将允许它们在没有警告的情况下中断依赖项目,这听起来就像正在发生的那样。
每个依赖项必须释放已知版本,无论是作为版本控制中的二进制文件还是标记,还是适合您的堆栈的任何版本。每次项目想要升级依赖项时,它都必须测试升级的结果。 (像往常一样全面的自动化测试将是一个很大的帮助。)如果它失败(因为依赖关系刚刚被破坏或因为依赖关系带来了不兼容的传递依赖版本),放弃升级,将问题报告给所有者依赖项,并在他们发布修复问题的版本后再试一次。如果成功,请更改项目在其构建配置中使用的依赖项版本。
理想情况下,项目将逐个升级依赖项,并单独完全测试每个升级。如果有必要同时升级多个依赖项(可能是因为两个依赖项都依赖于系统中只能有一个版本的第三个依赖项),那么它很好,尽管它可以#39 ;更大的变化,因此风险更大。如果你的项目具有这样的传递依赖性,那么在合理的版本中使它们向后兼容是值得的工程努力。
当然,很多工具都可以轻松地支持这个过程:只需将每个依赖项固定到特定版本。