如何告诉 Maven 使用最新版本的依赖项?
在 Maven 中,依赖项通常设置如下:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您正在使用具有频繁版本的库,则不断更新<版本>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
在 Maven 中,依赖项通常设置如下:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您正在使用具有频繁版本的库,则不断更新<版本>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
注意:
上面提到的 LATEST
和 RELEASE
元版本在 Maven 3 中被删除了插件依赖项,“为了可重现的构建”,这是 6 年前的。(对于常规依赖项,它们仍然工作得很好。有关插件依赖项,请参阅此 Maven 3 兼容解决方案。
如果您始终希望使用最新版本,Maven 有两个关键字,您可以将其用作版本范围的替代方法。您应该谨慎使用这些选项,因为您不再控制正在使用的插件/依赖项。
当您依赖插件或依赖项时,可以使用最新版本或发布的版本值。LATEST 是指特定工件的最新发布版本或快照版本,即特定存储库中最近部署的工件。RELEASE 是指存储库中最后一个非快照版本。通常,设计依赖于工件的非特定版本的软件不是最佳实践。如果您正在开发软件,您可能希望使用 RELEASE 或 LATEST 作为方便,这样在发布第三方库的新版本时就不必更新版本号。发布软件时,应始终确保项目依赖于特定版本,以减少生成或项目受到不受您控制的软件版本影响的可能性。如果有的话,请谨慎使用“最新”和“发布”。
有关更多详细信息,请参阅 Maven 手册的 POM 语法部分。或者,请参阅有关依赖项版本范围的此文档,其中:
[
]
(
)
下面是一个示例,用于说明各种选项。在 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>
如果需要对该工件的依赖关系,则可以使用以下选项(当然可以指定其他版本范围,只需在此处显示相关范围):
声明一个确切的版本(将始终解析为 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 超级 POM 激活“发布配置文件”。您可以使用“-Prelease-profile”或“-DperformRelease=true”来执行此操作。
值得强调的是,任何允许 Maven 选择依赖项版本(LATEST、RELEASE 和版本范围)的方法都可能使您面临构建时问题,因为更高版本可能具有不同的行为(例如,依赖项插件之前已将默认值从 true 切换到 false,结果令人困惑)。
因此,在发行版中定义确切的版本通常是一个好主意。正如Tim的回答所指出的那样,maven-versions-plugin是更新依赖版本的便捷工具,特别是 versions:use-latest-version和 versions:use-latest-releases目标。
现在我知道这个话题已经很老了,但是阅读这个问题和OP提供的答案,似乎Maven Versions插件实际上可能是他问题的更好答案:
特别是以下目标可能有用:
还提供了以下其他目标:
只是以为我会把它包括在内,以供将来参考。