【问题标题】:Maven dependency: ranges resolving issueMaven 依赖:范围解决问题
【发布时间】:2019-08-26 13:55:51
【问题描述】:

我想为某些依赖项的版本使用一个范围。但我真的不明白它应该如何为我的案例定义。
这是查找的结果 - maven-metadata-nexus.xml 文件。

<versioning>
    <latest>0.1.0-SNAPSHOT</latest>
        <versions>
            <version>0.0.13-SNAPSHOT</version>
            <version>0.0.14-SNAPSHOT</version>
            <version>0.0.15-SNAPSHOT</version>
            <version>0.0.16-SNAPSHOT</version>
            <version>0.0.17-SNAPSHOT</version>
            <version>0.1.0-SNAPSHOT</version>
        </versions>
        <lastUpdated>20190826092951</lastUpdated>
</versioning>

我想导入最新的 0.1.x 依赖,所以我认为这样写 range 就可以了

<dependency>
    <groupId>my.group.id</groupId>
    <artifactId>my-artifact</artifactId>
    <version>[0.1, 0.2)</version>
</dependency>

但是,maven 说我的工件没有可用的版本。 将范围定义为[0.1.0-SNAPSHOT, 0.2) 解决了这个问题,但我真的不明白为什么我需要对边界如此具体,这是否是一个好习惯。定义此类范围的正确方法是什么?

【问题讨论】:

  • 存在版本范围,但过时了。如今,借助versions-maven-plugin 进行显式更新更为常见。
  • @JFMeier 谢谢,它看起来确实更好。你能推荐一些在版本 maven 插件的帮助下发布工作流的文章吗?

标签: java maven dependencies dependency-management


【解决方案1】:

Maven 对待 SNAPSHOT 版本与“正常”版本不同。

  • “正常”(在 repo 中发布)版本通常是不可变的。它无法更新或删除,无论您何时访问它仍然是相同的。
  • SNAPSHOT 版本与之相反。它们可以随时更改(想想正在进行的工作)。

通常只能在您的本地存储库中找到快照。如果你想从远程仓库使用 SNAPSHOT,你必须明确告诉 Maven 仓库提供了 SNAPSHOT 版本。

考虑到这一区别,Maven folks have decided

依赖范围的解析不应解析为快照(开发版本),除非它作为明确的边界包含在内。除非您明确使用新功能,否则无需针对开发代码进行编译,在此新功能下,快照将成为您的版本规范的下限。

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2023-04-01
    • 2011-12-08
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2019-08-23
    相关资源
    最近更新 更多