【问题标题】:Best practice for dependency management in a project with a huge number of dependencies在具有大量依赖项的项目中进行依赖项管理的最佳实践
【发布时间】:2014-07-18 04:00:05
【问题描述】:

我们的项目就像一个适配器/外观接口,用于大量不同的其他库。依赖关系以某种方式重叠,有时会发生冲突,有时甚至会因为错误版本的依赖项提供相同接口的错误行为而使项目静默中断。 我们使用 Ivy 和 Ant 来做基本的依赖管理。 管理依赖关系和及早检测错误行为的最佳做法是什么?

【问题讨论】:

  • 其他库是你写的还是第三方的?
  • 当你有冲突的版本,并且版本控制是由传递依赖管理系统提供的,你有点陷入困境和困难的地方,可能需要做一些依赖树之类的事情(我不知道如何用 Ivy 做到这一点)并开始手动找出冲突。即使使用 Maven,您也必须手动执行操作,尽管它可以告诉您为什么由于冲突而省略了库,例如maven.apache.org/plugins/maven-dependency-plugin/examples/…
  • @DaveSchweisguth 它们主要是我们自己的库,但由不同团队甚至跨团队管理。
  • 如果您的内部库为接口提供“错误行为”,或者静默失败,则没有任何依赖管理系统能够对此做很多事情。
  • @Dmitri 这是由于提供的版本错误。我正在为此寻找一些指导方针。我知道没有任何系统可以单独做到这一点...... :(

标签: java ivy dependency-management


【解决方案1】:

这个问题的重要部分是关于过程,而不是工具。

如果项目的依赖项由其他团队或第三方拥有,则该项目必须明确接受每个新依赖项的每个新版本。允许依赖项自行升级将允许它们在没有警告的情况下破坏依赖项项目,这听起来像是正在发生的事情。

每个依赖项都必须发布已知版本,无论是作为版本控制中的二进制文件或标签,还是适合您的堆栈的任何内容。每次项目想要升级依赖项时,都必须测试升级的结果。 (像往常一样,全面的自动化测试将有很大帮助。)如果失败(因为依赖关系刚刚被破坏,或者因为依赖关系带来了传递依赖的不兼容版本),放弃升级,向所有者报告问题依赖项,并在他们发布解决问题的版本后重试。如果成功,请更改项目在其构建配置中使用的依赖项的版本。

理想情况下,项目将一次升级一个依赖项,并分别对每个升级进行全面测试。如果需要一次升级多个依赖项(可能是因为两个依赖项都依赖于第三个依赖项,而第三个依赖项在系统中只能有一个版本),那很好,尽管这是一个更大的更改,因此风险更大。如果您的项目具有这样的传递依赖项,那么值得进行工程努力以使其在合理的多个版本上向后兼容。

当然,许多工具很容易支持这个过程:只需将每个依赖项固定到特定版本。

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2011-10-15
    • 1970-01-01
    • 2019-08-24
    • 2011-08-16
    • 2018-10-04
    • 1970-01-01
    • 2013-06-22
    • 2011-06-16
    相关资源
    最近更新 更多