【问题标题】:What are the preferred steps to avoid Dependency Hell in Java?在 Java 中避免依赖地狱的首选步骤是什么?
【发布时间】:2016-10-31 21:37:42
【问题描述】:

最近我在 Java 中遇到了一个 dependency hell 问题。 是否有任何适当的程序来避免将来发生这种情况?

【问题讨论】:

  • 您能否详细说明您的具体问题是什么?在大多数通用情况下解决依赖关系是一个难题(根据我的经验,像 OSGI 这样的东西只会让它复杂 10 倍),但是对于中等规模的项目,有一些技巧可以保持理智。了解特定情况可以帮助指导您(与完全内部开发的系统相比,在处理 eclipse+plugins 等开放平台中的依赖项时,您会遇到不同的情况,后者只是具有冲突的递归依赖项)
  • 您提供的链接显示了解决这个问题的 8 种方法,不是吗?
  • 其实我问的是如何避免,而不是事后解决(这更难)。
  • @AndrewTobilko 是的,它有一些信息。但我想知道是否有人可以给出更具表现力的答案。

标签: java dependencies dependency-management


【解决方案1】:

首先,使用 maven 或 gradle 之类的依赖管理器。没有包含第三方 jars 的 lib 文件夹,显然没有将类或 *.java 文件从其他项目复制到您的项目。对不起,如果这很明显,但我看到很多项目都是使用这种技术构建的。

然而,下一个阶段是优化依赖关系。您可以使用都使用库 C 的库 A 和 B。如果两者都使用相同版本的库 C 就可以了。如果它们依赖于不同版本的库 C,那么地狱就开始了。在大多数情况下,这不会导致任何问题,您甚至可能不知道这一事实。但是有时它可能会导致问题。为避免这种情况,我建议您不时检查项目的依赖关系树,查找重复项,如果存在重复项,请使用依赖项管理器的排除指令排除旧版本。

但是,由于这些版本的库不兼容,这可能会失败。在这种情况下,没有解决问题的通用方法。有时您必须降级一个(或多个)依赖项以使它们一起工作并等待使用较新版本的库 C 的较新版本(在我们的示例中)。

Java 程序员在 2016 年的好运在于,大多数工具通常都是开源的,并且其中很多都可以贡献(例如通过 github),所以有时你可以贡献你的修复并帮助自己和其他开发人员获得新版本更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2021-09-07
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多