Maven依赖:范围解决问题

时间:2019-08-26 13:55:51

标签: java maven dependencies dependency-management

我想为某些依赖项的版本使用范围。但是我真的不知道如何为我的案例定义它。
这是查找结果-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依赖项,所以我认为以这种方式编写范围可以做到这一点

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

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

1 个答案:

答案 0 :(得分:1)

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

  • “普通”(发布在仓库中)版本通常是不可变的。它既不能更新也不能删除,无论何时访问它都将保持不变。
  • SNAPSHOT版本与此相反。它们可以随时更改(认为正在进行的工作)。

通常只能在本地存储库中找到SNAPSHOT。如果要使用远程回购中的SNAPSHOT,则必须明确告知Maven,该回购提供了SNAPSHOT版本。

牢记这一区别,Maven folks have decided

  

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