在Maven中,依赖关系通常是这样设置的:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您使用的是频繁发布的库,那么不断更新<version>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
在Maven中,依赖关系通常是这样设置的:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您使用的是频繁发布的库,那么不断更新<version>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
当前回答
使用过最新快照的用户,请确保您有-U,否则将无法获取最新快照。
mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories
其他回答
在提出这个问题时,maven中的版本范围存在一些问题,但这些问题已经在maven的新版本中得到解决。本文很好地捕捉了版本范围的工作原理和最佳实践,以更好地理解maven如何理解版本:https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855
依赖项语法位于依赖项版本需求规范文档中。这里是为了完整:
依赖项的版本元素定义版本要求,用于计算有效的依赖项版本。版本要求具有以下语法:1.0:1.0上的“软”要求(仅为建议,如果它与依赖关系的所有其他范围相匹配)[1.0]:1.0中的“硬”要求(,1.0]:x<=1.0[1.2,1.3]:1.2<=x<=1.3[1.0,2.0):1.0<=x<2.0[1.5,):x>=1.5(,1.0],[1.2,):x<=1.0或x>=1.2;多个集合以逗号分隔(,1.1),(1.1,):这不包括1.1(例如,如果不知道与此库结合使用)
在您的情况下,您可以执行类似于<version>〔1.2.3,)</version>的操作
我在maven 3.5.4中的解决方案,在eclipse中使用nexus:
<dependency>
<groupId>yilin.sheng</groupId>
<artifactId>webspherecore</artifactId>
<version>LATEST</version>
</dependency>
然后在eclipse:atl+F5中,选择快照/发布的强制更新
这对我有用。
如果你想让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。
请查看此页(“依赖项版本范围”部分)。你可能想做的是
<version>[1.2.3,)</version>
这些版本范围在Maven2中实现。