如何告诉Maven使用最新版本的依赖项?

在Maven中,依赖项一般是这样设置的: html

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

如今,若是您正在使用发布频繁的库,则不断更新<version>标记可能会有些烦人。 有什么方法能够告诉Maven始终使用最新版本(来自存储库)? apache


#1楼

注意: oracle

此答案仅适用于Maven 2! 在6年前, “出于可复制的构建”已在Maven 3中删除了提到的LATESTRELEASE转换。 请参考此兼容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目标。


#2楼

如今我知道这个主题很旧,可是阅读问题和OP提供的答案后,看来Maven版本插件实际上多是他的问题的更好答案:

特别是可使用如下目标:

  • 版本:use-latest-versions在pom中搜索全部已为较新版本的版本,并将其替换为最新版本。
  • 版本:use-latest-releases在pom中搜索全部非SNAPSHOT版本,这些版本都是较新的版本,并将其替换为最新版本。
  • 版本:update-properties更新项目中定义的属性,以便它们对应于特定依赖项的最新可用版本。 若是必须将一组依赖项所有锁定到一个版本,这将颇有用。

还提供了如下其余目标:

  • 版本:display-dependency-updates扫描项目的依赖关系,并生成这些依赖关系的报告,这些报告具备较新的版本。
  • 版本:display-plugin-updates扫描项目的插件,并生成这些插件具备较新版本的报告。
  • 版本:update-parent更新项目的父部分,以便它引用最新的可用版本。 例如,若是您使用公司根POM,则在须要确保使用最新版本的公司根POM时,此目标可能会有所帮助。
  • 版本:update-child-modules更新项目子模块的父部分,所以版本与当前项目的版本匹配。 例如,若是您有一个聚合器pom也是它聚合的项目的父级,而且子级和父级版本不一样步,则此mojo能够帮助修复子级模块的版本。 (请注意,若是您的项目被严重破坏以致于因为版本不匹配而没法构建,则可能须要使用-N选项调用Maven才能运行此目标)。
  • version:lock-snapshots在pom中搜索全部-SNAPSHOT版本,并将其替换为该-SNAPSHOT的当前时间戳版本,例如-20090327.172306-4
  • 版本:unlock-snapshots在pom中搜索全部时间戳锁定的快照版本,并将其替换为-SNAPSHOT。
  • 版本:resolve-ranges使用版本范围查找依赖项,并将范围解析为所使用的特定版本。
  • 版本:use-releases在pom中搜索全部已发布的-SNAPSHOT版本,并将其替换为相应的发布版本。
  • 版本:use-next-releases在pom中搜索全部非SNAPSHOT版本,这些版本已是较新的发行版,并将其替换为下一个发行版。
  • 版本:use-next-versions在pom中搜索全部已是较新版本的版本,并将其替换为下一个版本。
  • 版本:commit删除pom.xml.versionsBackup文件。 构成内置的“穷人SCM”的一半。
  • 版本:还原从pom.xml.versionsBackup文件中还原pom.xml文件。 构成内置的“穷人SCM”的一半。

只是觉得我会把它包括在内,以备未来参考。


#3楼

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


#4楼

您是否可能依赖于开发版本,这些版本在开发期间显然会发生很大变化?

除了增长开发版本的版本外,您还可使用在必要时覆盖的快照版本,这意味着您没必要在每次更改时都更改版本标签。 像1.0-快照...

可是也许您正在尝试实现其余目标;)


#5楼

请查看此页面 (“依赖版本范围”部分)。 您可能想作的是

<version>[1.2.3,)</version>

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

相关文章
相关标签/搜索