在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始终使用最新的可用版本(来自存储库)?
当前回答
依赖项语法位于依赖项版本需求规范文档中。这里是为了完整:
依赖项的版本元素定义版本要求,用于计算有效的依赖项版本。版本要求具有以下语法: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使用最新版本的依赖项,那么你可以使用版本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。
有时您不想使用版本范围,因为它们似乎很难解决您的依赖关系,尤其是在持续交付且有大量版本的情况下——主要是在繁重的开发过程中。
一种解决方法是使用版本maven插件。例如,可以声明属性:
<properties>
<myname.version>1.1.1</myname.version>
</properties>
并将版本maven插件添加到pom文件中:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.3</version>
<configuration>
<properties>
<property>
<name>myname.version</name>
<dependencies>
<dependency>
<groupId>group-id</groupId>
<artifactId>artifact-id</artifactId>
<version>latest</version>
</dependency>
</dependencies>
</property>
</properties>
</configuration>
</plugin>
</plugins>
</build>
然后,为了更新依赖关系,您必须执行以下目标:
mvn versions:update-properties validate
如果有比1.1.1更新的版本,它将告诉您:
[INFO] Updated ${myname.version} from 1.1.1 to 1.3.2
您是否可能依赖于在开发过程中明显变化很大的开发版本?
不增加开发版本的版本,您可以只使用快照版本,在必要时覆盖快照版本,这意味着您不必在每次微小更改时更改版本标记。类似于1.0-SNAPSHOT。。。
但也许你正在尝试实现其他目标;)
现在我知道这个话题已经过时了,但是阅读这个问题和OP提供的答案,Maven版本插件实际上可能是对他的问题的更好答案:
特别是以下目标可能有用:
版本:使用最新版本在pom中搜索所有版本其为较新版本将其替换为最新的版本版本:使用最新版本在pom中搜索所有非SNAPSHOT更新的版本释放并替换为最新版本。版本:更新属性更新在中定义的财产项目,使其与的最新可用版本特定依赖关系。这可能是如果一组依赖项必须全部锁定到一个版本。
还提供了以下其他目标:
版本:显示相关性更新扫描项目的相关性和生成这些的报告具有更新版本的依赖项版本可用。版本:显示插件更新扫描项目的插件和生成这些插件的报告其具有可用的更新版本。版本:更新父项更新项目的父部分,以便它引用了最新的可用版本。例如,如果你使用的是企业根POM,这个如果你需要的话,这个目标会很有帮助确保您使用的是最新的企业根POM的版本。版本:更新子模块更新项目的子模块版本与当前项目。例如,如果您有一个聚合器pom它的项目的父级骨料和儿童以及父版本不同步,这mojo可以帮助修复子模块。(注意,您可能需要在中使用-N选项调用Maven如果您的这个项目被破坏得很厉害无法生成,因为版本不匹配)。版本:锁定快照在pom中搜索所有-SNAPSHOT版本,并将其替换为当前时间戳版本-快照,例如-20090327.172306-4版本:解锁快照在pom中搜索所有时间戳锁定的快照版本和替换他们用-SNAPSHOT。版本:解析范围使用版本范围和将范围解析为特定正在使用的版本。版本:使用releases在pom中搜索所有SNAPSHOT版本已发布并替换它们具有相应的版本版本版本:使用下一个版本在pom中搜索所有非SNAPSHOT更新的版本释放并替换为下一版本。版本:使用下一个版本在pom中搜索所有版本其为较新版本将其替换为下一版本。versions:commit删除pom.xml.versionsBackup文件。形式内置“穷人”的一半SCM”。版本:revert从pom.xml.versionsBackup文件。形式内置“穷人”的一半SCM”。
我只是想把它包括在内,以备将来参考。
使用过最新快照的用户,请确保您有-U,否则将无法获取最新快照。
mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories