【问题标题】:Should Maven dependency version ranges be considered deprecated?是否应该将 Maven 依赖版本范围视为已弃用?
【发布时间】:2011-11-02 07:03:03
【问题描述】:

鉴于在官方文档中很难找到任何关于依赖版本范围的信息(我能想到的最好的方法是 http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution),我想知道它们是否仍被视为 Maven POM 的一等公民。

我想大多数人都会同意这是一种不好的做法,但我想知道为什么很难找到有关它的任何官方信息。

【问题讨论】:

    标签: maven-2 maven-3 maven


    【解决方案1】:

    它们并没有在正式意义上被弃用,它们将在未来的版本中被删除。然而,它们的局限性(以及随后缺乏广泛采用)意味着它们不如最初预期的那么有用,而且如果不进行重大重新思考,它们不太可能得到改进。

    这就是为什么文档仅以设计文档的形式存在 - 它们存在,但重要的用例从未完成到我建议普遍使用它们的地步。

    如果您有一个当前有效的用例,并且可以适应这些限制,您可以期望它们在可预见的未来继续工作,但除此之外几乎没有什么工作要做。

    【讨论】:

    • @BrettPorter,你有“缺乏广泛采用”的来源吗?
    • 为什么它们没有最初预期的那么有用?
    【解决方案2】:

    我不知道您为什么认为没有记录版本范围。 Maven Complete Reference 文档中有一个具体的摘要。

    尽管如此 - 一个巨大的问题(在我看来)是记录在案,“依赖范围的解析不应解析为快照(开发版本),除非它被包含为明确的边界。”(您提供的链接)但系统的行为不同。如果您使用版本范围,如果它们存在于您的范围中,您将获得 SNAPSHOT 版本 (MNG-3092)。是否需要的讨论还没有结束。

    目前 - 如果您使用版本范围 - 您可能会获得 SNAPSHOT 依赖项。所以你真的必须小心并决定是否需要这样做。它可能对您自己开发的依赖项有用,但我怀疑您是否应该将它用于 3rd 方库。

    【讨论】:

    • 好吧,我在谷歌上搜索它,我能找到的最好的就是上面的链接。我本来希望 Apache 网站上有一些官方的东西——因为它毕竟是一个 Apache 项目。但是感谢您的链接。
    • @Kutzi Sonatype 是 maven 项目(和生态系统)的 strong 贡献者 - 所以他们的文档也是某种“第一手”信息。
    • 但只是“第一手”。因此,在我看到官方 Apache 文档之前,我坚持我的声明,即没有记录版本范围 ;-)
    • @Kutzi 祝你好运,使用 maven(和其他开源软件)只考虑官方文档:-)
    • 我不想在这里开始讨论,但我并不是说我只考虑官方文档。我的观点是:如果它不是官方文档的一部分,那么它就是 - 恕我直言 - 不是官方支持的功能。
    【解决方案3】:

    版本范围是 Maven 仍然有用的唯一原因。即使考虑不使用它们也是不好的做法,因为它会导致您陷入多模块构建、非功能性父 pom、需要 10 分钟或更长时间的构建、结构不良的项目(如我们在非法项目中介绍的 Spring、Hibernate 和 Wicket)的灾难争论播客。

    为了回答您的问题,它们并未被弃用,并且在许多项目中都成功使用(除非 Sonatype 允许损坏的元数据进入 Apache Maven Central)。

    如果您想要一个非常好的非多模块构建示例(仅限reactor.xml),其中版本范围被广泛使用,请查看粘性代码(http://code.google.com/p/stickycode /)

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多