Maven 2.2.1 声称支持版本范围(参见例如http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-project-dependency.html#pom-relationships-sect-version-ranges http://www.sonatype.com/books/mvnref-book/reference/pom-relationships-sect-project-dependencies.html#pom-relationships-sect-version-ranges)
我从全新的 Maven 安装中尝试了以下 pom:
<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>rangetest</artifactId>
<groupId>my.group</groupId>
<version>1.0</version>
<packaging>jar</packaging>
<description>test project containing one dependency, only</description>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
依赖项应该解析为 junit 4.8.2,对吧?
但 4.8 版本已解决:
C:\Users>mvn dependency:tree
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'dependency'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - my.group:rangetest:jar:1.0
[INFO] task-segment: [dependency:tree]
[INFO] ------------------------------------------------------------------------
[INFO] [dependency:tree {execution: default-cli}]
[INFO] my.group:rangetest:jar:1.0
[INFO] \- junit:junit:jar:4.8:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Oct 07 14:30:40 CEST 2010
[INFO] Final Memory: 9M/23M
[INFO] ------------------------------------------------------------------------
您可能认为这是 Junit 的问题,因为 4.8 是现有版本,但事实并非如此。在我的项目中,我部署了从 1.0.0 到 1.0.15 的版本(没有版本 1.0!),但是mvn dependency:tree
抱怨缺少 1.0 版本的工件。
仅当您实际指定版本范围时才有效or如果您有多个 POM。你用4.8
这是单个版本号,因此 Maven 尝试直接解析它。版本范围必须以[
or (
(分别包含和排除)。
对于您的情况,请尝试:[4.8,4.9)
这应该为您提供具有相同 API 的最高版本(即所有错误修复,但没有重大更改)。
本文档展示了 Maven 如何解释版本:https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html https://maven.apache.org/enforcer/enforcer-rules/versionRanges.html
第一行似乎支持你的立场(4.8
意思是“至少 4.8”),但有一个问题:Maven 只会在有人特别要求时选择更高的版本。因此,除非您的构建中有更多 POM,并且其中之一要求4.8.2
, 4.8
对于 Maven 来说“足够好”。
将其视为解决冲突的提示。如果 POM A 要求 4.8,B 要求 4.8.2andB依赖于A,那么Maven就必须做出决定。应该失败吗?应该用4.8吗?还是4.8.2?
规则通过选择 4.8.2 解决了此冲突,而不给出警告或错误。
如果A要求[4.8]
,你会得到一个错误,因为 Maven 无法默默地将依赖项“升级”到 4.8.2,而且它当然也无法将 4.8.2 降级到 4.8。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)