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

标签 java maven dependencies maven-2 maven-metadata

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

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

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

最佳答案

注意:

提到的LATESTRELEASE元版本have been dropped for plugin dependencies in Maven 3 "for the sake of reproducible builds" ,6年多前。 (对于常规依赖关系,它们仍然可以完美地工作。) 对于插件依赖请引用这个 Maven 3 compliant solution

<小时/>

如果您始终想使用最新版本,Maven 有两个关键字可以用来替代版本范围。您应该谨慎使用这些选项,因为您不再控制您正在使用的插件/依赖项。

When you depend on a plugin or a dependency, you can use the a version value of LATEST or RELEASE. LATEST refers to the latest released or snapshot version of a particular artifact, the most recently deployed artifact in a particular repository. RELEASE refers to the last non-snapshot release in the repository. In general, it is not a best practice to design software which depends on a non-specific version of an artifact. If you are developing software, you might want to use RELEASE or LATEST as a convenience so that you don't have to update version numbers when a new release of a third-party library is released. When you release software, you should always make sure that your project depends on specific versions to reduce the chances of your build or your project being affected by a software release not under your control. Use LATEST and RELEASE with caution, if at all.

请参阅POM Syntax section of the Maven book更多细节。或者查看 Dependency Version Ranges 上的此文档,其中:

  • 方括号 ( [ & ] ) 表示“闭合”(包含)。
  • 括号 ( ( & ) ) 表示“开放”(独占)。

这是一个说明各种选项的示例。在 Maven 存储库中,com.foo:my-foo 具有以下元数据:

<?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>

如果需要对该 Artifact 的依赖,您可以选择以下选项(当然可以指定其他 version ranges,仅在此处显示相关选项):

声明确切的版本(始终解析为 1.0.1):

<version>[1.0.1]</version>

声明一个显式版本(除非发生冲突,否则将始终解析为 1.0.1,此时 Maven 将选择匹配的版本):

<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 super POM激活“发布配置文件”。 。您可以使用“-Prelease-profile”或“-DperformRelease=true”来执行此操作

<小时/>

值得强调的是,任何允许 Maven 选择依赖项版本(最新、发布和版本范围)的方法都可能让您面临构建时间问题,因为更高版本可能有不同的行为(例如依赖项插件以前有将默认值从 true 切换为 false,结果令人困惑)。

因此,在发行版中定义确切的版本通常是一个好主意。如Tim's answer指出,maven-versions-plugin是一个用于更新依赖版本的便捷工具,特别是 versions:use-latest-versionsversions:use-latest-releases目标。

关于java - 如何告诉 Maven 使用最新版本的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57790377/

相关文章:

java - 如何将整数文本行转换为整数数组?

java - 使 Blackberry CheckboxField 的宽度刚好适合文本

maven - 当我有多个用于该目标的配置时,如何在 Maven 插件中使用特定配置运行特定目标

maven - 如何构建要安装在远程系统上的 Maven 项目的 RPM

java - 是否有一个不会混淆职责的 GWT Maven 项目结构?

visual-studio - 您如何在 Visual Studio 解决方案之间共享外部依赖项?

java - Android Gradle如何与调试库链接

java - 使用 ContentProvider 在 SQLITE 中缓慢检索数据需要很长时间

java - 如何检查该池 'reuses' 线程

asp.net-mvc-3 - 添加可部署依赖项 - 缺少 MVC 复选框