在Maven中,依赖关系通常是这样设置的:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您使用的是频繁发布的库,那么不断更新<version>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
在Maven中,依赖关系通常是这样设置的:
<dependency>
<groupId>wonderful-inc</groupId>
<artifactId>dream-library</artifactId>
<version>1.2.3</version>
</dependency>
现在,如果您使用的是频繁发布的库,那么不断更新<version>标记可能会有些烦人。有没有办法告诉Maven始终使用最新的可用版本(来自存储库)?
当前回答
注:
6年前,Maven 3中的插件依赖性“为了可复制的构建”,已经删除了上述最新和发布元版本。(对于常规依赖关系,它们仍然工作得很好。)有关插件依赖关系,请参阅此Maven 3兼容解决方案。
如果您总是想使用最新版本,Maven有两个关键字可以作为版本范围的替代。您应该小心使用这些选项,因为您不再能够控制正在使用的插件/依赖项。
当您依赖插件或依赖项时,可以使用LATEST或RELEASE的a版本值。LATEST是指特定工件的最新发布或快照版本,即特定存储库中最近部署的工件。RELEASE是指存储库中的最后一个非快照版本。通常,设计依赖于工件的非特定版本的软件不是最佳实践。如果您正在开发软件,您可能希望使用RELEASE或最新版本,以便在发布第三方库的新版本时不必更新版本号。当您发布软件时,您应该始终确保您的项目依赖于特定版本,以减少您的构建或项目受到不受您控制的软件版本影响的可能性。如果需要,请谨慎使用“最新”和“释放”。
有关详细信息,请参阅Maven书中的POM语法部分。或者参见本文档中的依赖版本范围,其中:
方括号([&])表示“闭合”(包括)。括号((&))表示“开放”(排他)。
下面是一个示例,说明了各种选项。在Maven存储库中,com.foo:myfoo具有以下元数据:
<?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>
将版本声明为最新版本(将解析为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版本插件是更新依赖关系版本的便捷工具,特别是版本:使用最新版本和版本:使用最近版本目标。
其他回答
事实是,即使在3.x中,它仍然有效,令人惊讶的是项目的构建和部署。但是LATEST/REEASE关键字在m2e和eclipse中引起了问题,同时项目也依赖于通过LATEST/RERELEASE部署的依赖性,无法识别版本。
如果您试图将版本定义为属性,并在其他位置引用它,这也会导致问题。
因此,如果可以的话,结论是使用版本maven插件。
注:
6年前,Maven 3中的插件依赖性“为了可复制的构建”,已经删除了上述最新和发布元版本。(对于常规依赖关系,它们仍然工作得很好。)有关插件依赖关系,请参阅此Maven 3兼容解决方案。
如果您总是想使用最新版本,Maven有两个关键字可以作为版本范围的替代。您应该小心使用这些选项,因为您不再能够控制正在使用的插件/依赖项。
当您依赖插件或依赖项时,可以使用LATEST或RELEASE的a版本值。LATEST是指特定工件的最新发布或快照版本,即特定存储库中最近部署的工件。RELEASE是指存储库中的最后一个非快照版本。通常,设计依赖于工件的非特定版本的软件不是最佳实践。如果您正在开发软件,您可能希望使用RELEASE或最新版本,以便在发布第三方库的新版本时不必更新版本号。当您发布软件时,您应该始终确保您的项目依赖于特定版本,以减少您的构建或项目受到不受您控制的软件版本影响的可能性。如果需要,请谨慎使用“最新”和“释放”。
有关详细信息,请参阅Maven书中的POM语法部分。或者参见本文档中的依赖版本范围,其中:
方括号([&])表示“闭合”(包括)。括号((&))表示“开放”(排他)。
下面是一个示例,说明了各种选项。在Maven存储库中,com.foo:myfoo具有以下元数据:
<?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>
将版本声明为最新版本(将解析为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版本插件是更新依赖关系版本的便捷工具,特别是版本:使用最新版本和版本:使用最近版本目标。
请查看此页(“依赖项版本范围”部分)。你可能想做的是
<version>[1.2.3,)</version>
这些版本范围在Maven2中实现。
使用过最新快照的用户,请确保您有-U,否则将无法获取最新快照。
mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories
依赖项语法位于依赖项版本需求规范文档中。这里是为了完整:
依赖项的版本元素定义版本要求,用于计算有效的依赖项版本。版本要求具有以下语法:1.0:1.0上的“软”要求(仅为建议,如果它与依赖关系的所有其他范围相匹配)[1.0]:1.0中的“硬”要求(,1.0]:x<=1.0[1.2,1.3]:1.2<=x<=1.3[1.0,2.0):1.0<=x<2.0[1.5,):x>=1.5(,1.0],[1.2,):x<=1.0或x>=1.2;多个集合以逗号分隔(,1.1),(1.1,):这不包括1.1(例如,如果不知道与此库结合使用)
在您的情况下,您可以执行类似于<version>〔1.2.3,)</version>的操作