gpt4 book ai didi

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

转载 作者:bug小助手 更新时间:2023-10-28 01:33:19 25 4
gpt4 key购买 nike

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

将版本声明为 LATEST(将解析为 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 选择依赖版本(LATEST、RELEASE 和版本范围)的方法都可能让您面临构建时间问题,因为更高版本可能有不同的行为(例如,依赖插件以前将默认值从 true 切换为 false,结果令人困惑)。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com