本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
如何告诉Maven使用最新版本的依赖项?
在Maven中,依赖项通常是这样设置的:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您正在使用发布频繁的库,则不断更新标记可能会有些烦人。有什么办法告诉Maven始终使用最新的可用版本(来自存储库)?
高分回答:
笔记:
在6年前,“为了可复制的构建”,已针对Maven 3中的插件依赖项删除了提及的LATEST和RELEASEmetaversions 。(对于常规依赖项,它们仍然可以正常工作。)有关插件依赖项,请参考此Maven 3兼容解决方案。
如果您始终想使用最新版本,则Maven有两个关键字可以用作版本范围的替代。您应该谨慎使用这些选项,因为您将不再控制所使用的插件/依赖项。
当您依赖插件或依赖项时,可以使用LATEST或RELEASE的版本值。 LATEST是指特定工件的最新发行版本或快照版本,是特定存储库中最新部署的工件。 RELEASE是指存储库中的最后一个非快照发行版。通常,设计依赖于工件的非特定版本的软件并不是最佳实践。如果您正在开发软件,则可能希望使用RELEASE或LATEST作为便利,以便在发行新版本的第三方库时不必更新版本号。发布软件时,应始终确保项目依赖于特定版本,以减少构建或项目受不受您控制的软件版本影响的机会。谨慎使用LATEST和RELEASE。
有关更多详细信息,请参见Maven书籍的POM语法部分。或在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>
如果需要依赖于该工件,则可以使用以下选项(当然可以指定其他版本范围,仅在此处显示相关的范围):
声明一个确切的版本(将始终解析为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-releases目标。
文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/3…
作者建议: 通过[]来设置版本的范围,Maven 3 已去除最新版本,因为很危险,你想,哪天更新了最新的包导致不兼容老接口,就很容易出错!
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️