Maven不正确的依赖版本解析

Maven incorrect dependancy version resolution

当包含最新的 Spring Hateoas Starter 时,Maven 正在下载不正确的 Spring Hateoas。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-hateoas</artifactId>
    <version>2.2.0.M1</version>
</dependency>

当我 运行 Maven 依赖树时,我得到以下信息:

> mvn dependency:tree | grep hateoas
INFO] +- org.springframework.boot:spring-boot-starter-hateoas:jar:2.2.0.M1:compile
[INFO] |  +- org.springframework.hateoas:spring-hateoas:jar:0.25.1.RELEASE:compile

这似乎不正确,因为 POM 将 1.0.0.M1 列为要包含的版本: Spring Hateoas Starter POM

我尝试清除缓存并手动删除了缓存,然后 运行 mvn -U。结果总是一样的。

附加信息:

Apache Maven 3.5.4 (Red Hat 3.5.4-4)
Maven home: /usr/share/maven
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.fc29.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.20.14-200.fc29.x86_64", arch: "amd64", family: "unix"
<repositories>
    <repository> 
        <id>repository.spring.milestone</id> 
        <name>Spring Milestone Repository</name> 
        <url>http://repo.spring.io/milestone</url> 
    </repository>
</repositories>

根据经验“永远不要混合来自不同版本框架的 jar”。在这种情况下,您试图将 Spring Boot 2.1 与较新的 Spring Boot 2.2 jar 混合。这将导致各种奇怪的问题,因为它们还会引入不同的框架版本。 (Spring 5.2 等)

现在,通过使用 spring-boot-starter-parent 作为项目的父级,可以部分避免这种情况,因为它可以相当有效地管理依赖版本。另请参阅参考指南的 this section

如果您想使用当前 Spring 引导版本尝试另一个 Spring HATEOAS 版本,您可以尝试覆盖 spring-hateoas.version 属性。为此,您仍然需要里程碑或快照存储库。

不过我不确定 Spring HATEOAS 1.x 是否使用 Spring 5.1 或其他版本。