Maven依赖版本范围是否应被视为已弃用?

时间:2011-08-23 20:39:17

标签: maven-2 maven-3 maven

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

我认为大多数人都会认为他们是一种不好的做法,但我想知道为什么要找到任何关于它的官方文章很难。

3 个答案:

答案 0 :(得分:9)

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

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

如果您的用例目前有效,并且可以适应这些限制,那么您可以期望它们在可预见的未来继续发挥作用,但在工作中除此之外几乎没有。

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:1)

版本范围是Maven仍然有用的唯一原因。即使考虑不使用它们也是不好的做法,因为它会导致你陷入多模块构建,非功能性父poms,需要10分钟或更长时间的构建,Spring,Hibernate和Wicket等结构严重的项目的灾难,因为我们会覆盖我们的非法参数播客。

要回答您的问题,它们不会被弃用,并且会在许多项目中成功使用(除非Sonatype允许将损坏的元数据导入Apache Maven Central)。

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