gpt4 book ai didi

maven-2 - maven 依赖范围不能按预期工作

转载 作者:行者123 更新时间:2023-12-01 07:16:18 26 4
gpt4 key购买 nike

Maven 2.2.1 声称支持版本范围(参见例如 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 版的工件。

最佳答案

这仅在您实际指定版本范围或您有多个 POM 时才有效。您使用 4.8这是一个单一的版本号,因此 Maven 尝试直接解析它。版本范围必须以 [ 开头或 ( (分别为包容性和排他性)。

在您的情况下,请尝试:[4.8,4.9)
这应该为您提供具有相同 API 的最高版本(即所有错误修复但没有重大更改)。

本文档展示了 Maven 如何解释版本: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.2 B 取决于 A,然后 Maven 必须做出决定。它应该失败吗?它应该使用 4.8 吗?还是4.8.2?

规则通过选择 4.8.2 而不给出警告或错误来解决此冲突。

如果 A 要求 [4.8] ,你会得到一个错误,因为 Maven 不能默默地将依赖“升级”到 4.8.2,它当然不能将 4.8.2 降级到 4.8。

关于maven-2 - maven 依赖范围不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com