【问题标题】:How to make maven use the latest release version within version range?如何让maven使用版本范围内的最新版本?
【发布时间】:2013-01-04 02:50:07
【问题描述】:

在我的 maven 项目中,我使用这样的依赖项:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>[4.2.2, 5.0)</version>
</dependency>

由于下一个主要版本 (5.0) 可能会更改 API,我希望我的项目使用可用于分支 4.x 的最新 stable 版本。

今天早上的错误调查告诉我,这个表达式 [4.2.2, 5.0) 抓取了任何可用的版本。在我的例子中:4.3-alpha1。

如何让maven在版本范围内使用最新的release版本?

【问题讨论】:

  • 这里有一个类似的页面:stackoverflow.com/questions/30571/…
  • @Gavin 在链接中没有回答我的问题。在提问之前我已经看过了。
  • 我假设您使用 maven2(给定问题标签)。 Maven 强烈反对这样做,因为这会导致不可复制的构建。这将使任何未来迁移到最近的 Maven 版本成为一个痛苦的过程。所以,我强烈反对这样做,尽管它看起来很有用。
  • @SamuelEUSTACHI 现在我明白了。谢谢。
  • 不客气。关于我自己的项目之间的依赖关系,我有同样的想法。我认为风险并不像依赖外部供应商那么大。但我发现这不是一个好的做法,即使在这种情况下也是如此。例如,你的 pom 版本的 pom 也可以为你的项目提供某种“自我文档”,然后能够准确地知道在编译时和运行时使用的库集是很有用的。您可能想知道这一点以供以后调试。

标签: maven maven-2


【解决方案1】:

Maven 3 也支持 alpha、beta 和快照的版本控制 按照以下顺序 alpha < beta < snapshot

【讨论】:

【解决方案2】:

查看Maven range selections 的文档,我注意到评论:

依赖范围的解析不应解析为快照(开发版本),除非它作为显式边界包含在内。

除非工件版本以 -SNAPSHOT 结尾,否则 Maven 将认为它是有效的发布版本。据我所知,-alpha1 对 Maven 没有特殊意义。这只是另一个随机限定符。

无论如何,我强烈建议您放弃版本范围。可预测的构建应该是任何稳定项目的目标,而版本范围则与此相反。

【讨论】:

  • 感谢您提供有关范围的建议。从 Maven 开始,选择哪个选项并不总是很清楚。
  • 链接文档是 Maven 2.0 的设计草案。最终的实现实际上略有不同。
  • Predictable builds should be the goal of any stable project and version ranges fly in the face of that. 除非您更关心安全性而不是可预测的构建。如果构建被破坏,每个人都会看到它并急于修复。如果发现漏洞,没人会在意。
  • “不应该”,但会根据这个问题:issues.apache.org/jira/browse/MNG-3092
  • 我使用 maven 3.5.3,它与文档相反,将快照视为有效版本。
猜你喜欢
  • 2021-12-02
  • 2017-12-28
  • 2015-10-02
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多