在Maven中,依赖关系通常是这样设置的:

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

现在,如果您使用的是频繁发布的库,那么不断更新<version>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?


当前回答

在提出这个问题时,maven中的版本范围存在一些问题,但这些问题已经在maven的新版本中得到解决。本文很好地捕捉了版本范围的工作原理和最佳实践,以更好地理解maven如何理解版本:https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855

其他回答

我在maven 3.5.4中的解决方案,在eclipse中使用nexus:

<dependency>
    <groupId>yilin.sheng</groupId>
    <artifactId>webspherecore</artifactId>
    <version>LATEST</version> 
</dependency>

然后在eclipse:atl+F5中,选择快照/发布的强制更新

这对我有用。

请查看此页(“依赖项版本范围”部分)。你可能想做的是

<version>[1.2.3,)</version>

这些版本范围在Maven2中实现。

您是否可能依赖于在开发过程中明显变化很大的开发版本?

不增加开发版本的版本,您可以只使用快照版本,在必要时覆盖快照版本,这意味着您不必在每次微小更改时更改版本标记。类似于1.0-SNAPSHOT。。。

但也许你正在尝试实现其他目标;)

如果你想让Maven使用最新版本的依赖项,那么你可以使用版本Maven插件以及如何使用这个插件,Tim已经给出了一个很好的答案,跟随他的答案。

但作为一名开发人员,我不会推荐这种类型的实践。为什么?

Pascal Thivent在问题评论中已经给出了原因的答案

我真的不推荐这种做法(也不使用版本范围)为了构建再现性。突然开始的构建由于未知原因而失败比手动更新更令人讨厌版本号。

我将推荐这种做法:

<properties>
    <spring.version>3.1.2.RELEASE</spring.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

它易于维护和调试。您可以随时更新POM。

事实是,即使在3.x中,它仍然有效,令人惊讶的是项目的构建和部署。但是LATEST/REEASE关键字在m2e和eclipse中引起了问题,同时项目也依赖于通过LATEST/RERELEASE部署的依赖性,无法识别版本。

如果您试图将版本定义为属性,并在其他位置引用它,这也会导致问题。

因此,如果可以的话,结论是使用版本maven插件。