在Maven中,依赖项一般是这样设置的: html
<dependency> <groupId>wonderful-inc</groupId> <artifactId>dream-library</artifactId> <version>1.2.3</version> </dependency>
如今,若是您正在使用发布频繁的库,则不断更新<version>标记可能会有些烦人。 有什么方法能够告诉Maven始终使用最新版本(来自存储库)? apache
注意: oracle
此答案仅适用于Maven 2! 在6年前, “出于可复制的构建” , 已在Maven 3中删除了提到的LATEST
和RELEASE
转换。 请参考此兼容Maven 3的解决方案 。 maven
若是您始终想使用最新版本,则Maven有两个关键字能够用做版本范围的替代。 您应该谨慎使用这些选项,由于您将再也不控制所使用的插件/依赖项。 ide
当您依赖插件或依赖项时,可使用LATEST或RELEASE的版本值。 LATEST是指特定工件的最新发行版本或快照版本,是特定存储库中最新部署的工件。 RELEASE是指存储库中的最后一个非快照版本。 一般,设计依赖工件非特定版本的软件并非最佳实践。 若是您正在开发软件,则可能但愿使用RELEASE或LATEST做为便利,以便在发行新版本的第三方库时没必要更新版本号。 发布软件时,应始终确保项目依赖于特定版本,以减小构建或项目受不受您控制的软件版本影响的机会。 谨慎使用LATEST和RELEASE。 工具
有关更多详细信息,请参见Maven书籍的POM语法部分 。 或者在Dependency Version Ranges上查看此文档,其中: ui
[
& ]
)表示“封闭”(含)。 (
& )
)表示“开放”(不包括在内)。 这是说明各类选项的示例。 在Maven存储库中,com.foo:my-foo具备如下元数据: spa
<?xml version="1.0" encoding="UTF-8"?><metadata> <groupId>com.foo</groupId> <artifactId>my-foo</artifactId> <version>2.0.0</version> <versioning> <release>1.1.1</release> <versions> <version>1.0</version> <version>1.0.1</version> <version>1.1</version> <version>1.1.1</version> <version>2.0.0</version> </versions> <lastUpdated>20090722140000</lastUpdated> </versioning> </metadata>
若是须要依赖于该工件,则可使用如下选项(固然能够指定其余版本范围 ,仅在此处显示相关的范围): 插件
声明一个确切的版本(将始终解析为1.0.1): 设计
<version>[1.0.1]</version>
声明一个明确的版本(除非发生冲突,不然当Maven选择一个匹配的版本时,它将始终解析为1.0.1):
<version>1.0.1</version>
声明全部1.x的版本范围(当前将解析为1.1.1):
<version>[1.0.0,2.0.0)</version>
声明一个开放式版本范围(将解析为2.0.0):
<version>[1.0.0,)</version>
将版本声明为最新(将解析为2.0.0)(从Maven 3.x中删除)
<version>LATEST</version>
将版本声明为RELEASE(将解析为1.1.1)(从Maven 3.x中删除):
<version>RELEASE</version>
请注意,默认状况下,您本身的部署将更新Maven元数据中的“最新”条目,可是要更新“发布”条目,您须要从Maven超级POM激活“发布配置文件”。 您可使用“ -Prelease-profile”或“ -DperformRelease = true”来执行此操做
值得强调的是,任何容许Maven选择依赖项版本(最新,发布和版本范围)的方法均可以让您开放以解决构建时间问题,由于更高版本的行为可能不一样(例如,依赖项插件先前已将默认设置切换为默认值)。值从true到false,结果使人困惑)。
所以,一般最好在发行版中定义确切的版本。 正如Tim的答案所指出的那样, maven-versions-plugin是用于更新依赖项版本的便捷工具,尤为是版本:use-latest-versions和版本:use-latest-release目标。
如今我知道这个主题很旧,可是阅读问题和OP提供的答案后,看来Maven版本插件实际上多是他的问题的更好答案:
特别是可使用如下目标:
还提供了如下其余目标:
只是觉得我会把它包括在内,以备未来参考。
在提出这个问题时,maven中存在一些版本范围方面的问题,但这些问题已在较新版本的maven中获得解决。 本文很好地捕获了版本范围的工做原理和最佳实践,以更好地理解maven如何理解版本: https : //docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855
您是否可能依赖于开发版本,这些版本在开发期间显然会发生很大变化?
除了增长开发版本的版本外,您还可使用在必要时覆盖的快照版本,这意味着您没必要在每次更改时都更改版本标签。 像1.0-快照...
可是也许您正在尝试实现其余目标;)
请查看此页面 (“依赖版本范围”部分)。 您可能想作的是
<version>[1.2.3,)</version>
这些版本范围在Maven2中实现。