我如何告诉Maven使用最新版本的依赖关系?
在Maven中,依赖关系通常是这样设置的:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您正在处理频繁发布的库,不断更新<version>标签可能会有些恼人。 有什么办法可以告诉Maven始终使用最新的可用版本(来自存储库)?
注意:
这个答案只适用于Maven 2! 所提到的LATEST
和RELEASE
metaversions已被丢弃在Maven的3“的重现性着想建立”,在6年前。 请参考这个符合Maven 3的解决方案 。
如果您始终想要使用最新版本,Maven有两个关键字可用作版本范围的替代品。 您应该小心使用这些选项,因为您不再控制所使用的插件/依赖项。
当您依赖插件或依赖项时,可以使用LATEST或RELEASE的版本值。 最新引用特定工件的最新发布或快照版本,这是特定存储库中最近部署的工件。 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>
声明一个明确的版本(除非发生冲突,否则当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>
声明版本为LATEST(将解析为2.0.0)(从maven 3.x中移除)
<version>LATEST</version>
声明版本为RELEASE(将解析为1.1.1)(从maven 3.x中删除):
<version>RELEASE</version>
请注意,默认情况下,您自己的部署将更新Maven元数据中的“latest”条目,但要更新“release”条目,您需要激活Maven super POM中的“release-profile”。 您可以使用“-Prelease-profile”或“-DperformRelease = true”
值得强调的是,任何允许Maven选择依赖版本(最新版本,发布版本和版本范围)的方法都可能会导致构建时间问题,因为以后的版本可能会有不同的行为(例如,依赖项插件先前已切换为默认值从真到假,结果令人困惑)。
因此,在发行版中定义精确版本通常是一个好主意。 正如Tim的回答指出的那样,maven-versions-plugin是更新依赖版本的便捷工具,特别是版本:use-latest-versions和versions:use-latest-releases目标。
现在我知道这个话题已经很老了,但是阅读这个问题,OP提供了答案,似乎Maven Versions Plugin可能实际上是对他的问题的更好回答:
特别是可以使用以下目标:
还提供了以下其他目标:
只是以为我会将它包括在内以备将来参考。
请看这个页面(“依赖版本范围”部分)。 你可能想要做的是类似的
<version>[1.2.3,)</version>
这些版本范围在Maven2中实现。
链接地址: http://www.djcxy.com/p/5035.html上一篇: How do I tell Maven to use the latest version of a dependency?
下一篇: How do I suppress maven assembly plugin skipping files that are already added? Or allow overwrite?