Maven 依赖范围未按预期工作

2024-01-28

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(使用前将#替换为@)

Maven 依赖范围未按预期工作 的相关文章

  • 如何将工作表和范围作为变量传递?

    我想在子例程之间传递工作表的名称和范围 以下抛出 下标超出范围 错误 Sub This x Sheet1 y D3 MsgBox x Range y Value End Sub This is 我的项目资源管理器的示例 https i st
  • Maven2:Cargo 插件热部署和 Jonas 支持

    我正在尝试让 Cargo 插件在我的 Maven 项目上运行 以便从针对 Jonas 服务器的战争热部署中受益 官方文档并不清楚支持什么和不支持什么 例如你可以找到这个 http cargo codehaus org Hot Deploym
  • ElasticSearch bool should_not 过滤器

    我是elasticsearch的新手 所以我的问题是 bool 过滤器有 3 个部分 must All of these clauses must match The equivalent of AND must not All of th
  • 在maven项目之间共享测试资源

    有一个明确的解决方案可以使用以下命令在 Maven 项目之间共享公共测试代码test jar的目标maven jar plugin插件 参见here https stackoverflow com questions 174560 shar
  • 自动创建文件“requirements.txt”

    有时我从以下网站下载Python源代码GitHub https en wikipedia org wiki GitHub并且不知道如何安装所有依赖项 如果没有的话要求 txt文件我必须手动创建它 给定Python源代码目录 是否可以创建要求
  • 有没有免费的在线 Maven 存储库?

    有没有免费的在线私人maven2或maven3存储库 这样该团队就可以从各个区域访问存储库 如果您使用 github 则可以使用私有 github 项目作为您的 Maven 存储库 这里有关于如何将 Maven 工件发布到 github 的
  • 如何编写 Maven 构建脚本来执行 Java

    如何在构建过程中或构建刚刚完成后执行 Java 程序 可以直接从 pom 中执行此操作吗 mvn exec java Dexec mainClass org sonatype mavenbook weather Main EDIT 假设我想
  • range() 真的创建列表吗?

    我的教授和this guy http www secnetix de olli Python lambda functions hawk声称range创建值列表 注意 range 函数只是返回一个包含数字的列表 从 x 到 y 1 例如 r
  • Haskell Cabal:“包间接依赖于同一包的多个版本”

    清除我的所有后cabal installed 包 我运行了以下会话 cabal update Downloading the latest package list from hackage haskell org james bast c
  • Visual Studio '17 未在参考管理器中显示程序集

    我遇到的问题是 我似乎无法弄清楚如何添加对某些解决方案的引用 在我从 Visual Studio 17 开始的大多数解决方案中 我在解决方案资源管理器中看到 引用 但例如对于 asp net core web api 我得到 依赖项 每当解
  • 需要 Java 源文件的依赖树

    我需要从大型遗留 Java 代码库中提取一些特定功能 以便将其转换为独立的命令行应用程序 这段代码根本没有文档记录 并且不是很模块化 甚至不是很清晰 所以我很难弄清楚我需要保留什么 基本上我需要的是一棵依赖关系树 列出了这个 java 文件
  • 在 VBA 中从范围创建数组

    我遇到了一个看似基本的问题 但找不到任何资源来解决它 简而言之 我只想将一系列单元格 所有一列 的内容加载到数组中 我能够通过以下方式完成此任务 DirArray Array Range A1 Range A2 但由于某种原因 我无法以这种
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • Maven:如何使用 maven-ear-plugin 将文件添加到 EAR 内的根目录?

    我需要在使用 maven ear plugin 生成的 EAR 中添加 2 个 XML 文件 不幸的是 我还没有找到将任意文件添加到 EAR 的方法 这文档 http maven apache org plugins maven ear p
  • Exec 战前目标存档包

    我想在打包战争之前运行 maven replacer plugin 我找到了 准备包 阶段 但它在战争组装和复制所有资源之前触发 但我需要在复制所有资源时和创建存档之前进行更改 这在maven中可能吗 顺便说一句 我使用 maven 2 2
  • 如何使用分类器仅构建一个 JAR 文件?

    我在用着Maven 2 and maven jar plugin建立我的jar 我只想生成一个jar with a classifier 是否可以 在我的示例中 我只想生成myjar another 1 0 jar但不是myjar 1 0
  • Jacoco 代码覆盖率在 Jenkins 上显示覆盖率为 0%

    我已阅读了类似问题的大部分答案 但没有一个适合回答我的问题 我的 pom 文件中的配置文件如下所示
  • 即使另一个配置文件被激活,如何保持 activeByDefault 的 Maven 配置文件处于活动状态?

    我的 pom xml 中有一个配置文件 除非明确停用 P firstProfile 否则它应该始终处于活动状态 我通过使用 activeByDefault 标志解决了这个问题
  • NetBeans IDE maven项目无法解决依赖关系

    使用 eclipse 多年后 我正在将自己移植到 NetBeans IDE 我正在打开现有的 Maven 项目 一切似乎都正常 但是当我尝试构建该项目时 它会抛出错误 提示 无法解析项目的依赖项 尽管 JAR 文件存在于我的 m2 目录中
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢

随机推荐

  • Selenium Webdriver - 获取表数据

    我想从 UI 中的表中获取数据 我知道使用 tr 和 td 循环行和列 但我的桌子是这样的 table tbody tr td data td th data th td data td td data td tr tr td data t
  • VS 2015 文件保存时 CPU 使用率较高

    使用 Visual Studio 2015 我注意到 如果我使用所有解决方案的通用项目打开多个解决方案 如果我编辑并保存属于通用项目的一个 cs 文件 则所有 Visual Studio 2015 实例将消耗 CPU 10 15秒 请注意
  • (很多)UIWebView 内存泄漏

    我从其他帖子中看到 UIWebView 存在内存泄漏问题 然而 由于我泄漏的对象数量很多 我不得不怀疑我是否做错了什么 Leaks 报告了关于打开 UIWebView 加载页面和关闭 这是 Facebook 登录页面 的大约 60 次泄漏
  • java进程中提交内存和RSS的区别

    我正在运行一个简单的 java 进程 该进程运行 jetty 其顶部显示 2 9g 的 RAM 使用的JDK版本是1 8 0 112 使用本机内存跟踪 jcmd 显示总提交内存仅为 1 5G 内存 正如 jvisualvm 所报告的 直接缓
  • 添加用户输入的数字并在用户输入“end”时中断的循环

    创建一个不需要参数的函数 该函数要求用户输入一系列大于或等于零的数字 一次一个 用户键入 end 表示不再有数字 该函数计算所有输入值的总和 我应该能够仅使用 while 循环和 if 语句来完成此操作 我遇到的主要问题是我不知道如何做到这
  • SQLite 查询根据另一个表的值获取表

    我不确定这里必须有什么标题才能正确反映我的问题 我只能描述我想要的内容 有一个包含字段的表 id name city 还有接下来的几行 1 John London 2 Mary Paris 3 John Paris 4 Samy Londo
  • 无法使用 Laravel Mix 复制文件夹

    我有一个项目使用拉拉维尔 5 4 and Laravel 混合 我有一个图像文件夹 其中一些图像具有相同的名称但类别不同 因此它们包含在不同的目录中 So resources assets images globalimage png ve
  • 由于共享库事件而停止 - Visual Studio Code

    我是 Visual Studio Code 的初学者 我尝试在其上调试我的 C 代码 我这里有一个示例代码 include iostream using namespace std int main cout lt lt hello wor
  • My.Settings 中自定义类的数组列表

    我有一个 Visual Basic Net 2 0 程序 我正在将设置从较旧的设置文件移至 app config 程序设置文件 我正在努力尽可能地做好这件事 所以 我添加了我的设置如图所示 https i stack imgur com e
  • 启动应用程序时使用 pg-promise 验证数据库连接

    我正在构建一个快速应用程序 它使用以下命令连接到 postgres 数据库pg 承诺 https github com vitaly t pg promise module 我想确保启动应用程序服务器时数据库连接成功 换句话说 如果与数据库
  • Android 在通知单击时打开特定选项卡片段

    我有一个使用操作栏选项卡的 Android 应用程序 还有一个通知系统 我想在单击通知时直接打开特定选项卡 如何做到这一点 因为通知挂起意图只能打开活动 而我的主要活动包含 3 个选项卡的 3 个片段 以下是选项卡主要活动的代码 publi
  • Ionic v2 按钮文本大写

    在我的 ionic v2 应用程序中有一个按钮 无论我输入哪个文本 它总是大写 我不想添加 css utilities 因为我混合了小写和大写单词 这是我的代码
  • SQLiteConstraintException 不要进入 catch 内部

    当我运行该代码时 db insert 内部出现异常 08 29 15 40 17 519 E SQLiteDatabase 3599 android database sqlite SQLiteConstraintException col
  • Mono .EXE 程序集集资源管理器图标

    在Linux上使用gmcs编译时 如何设置最终EXE将使用的资源管理器图标 我有一个 ico 文件要附加到输出 exe 答案必须是可自动化构建并在 Linux 上执行 无需 wine 构建机器架构不是 x86 可以使用针对 Windows
  • 将 XML 值反序列化为枚举时处理额外空格

    我一直想知道是否可以做到这一点 当 XML 响应有不正确的值需要映射到枚举时 这将是一个很大的帮助 我具体处理的情况是当期望值有尾随空格而枚举期望它没有尾随空格时 XML
  • Android 编程中 b/w app:theme 和 android:theme 有什么区别

    我看到有人写这个 app theme style xyz 另一方面 有些人写 android theme style xyz 这2个代码有什么区别 app and android实际上是命名空间 你可以用同样的方式来思考它们packages
  • IdHTTP 如何发送原始正文

    我如何使用IdHTTP发送消息为PostMan下面的dos 我的第一次尝试如下 function TIdFoo SendIM const AID AMessage string Boolean const URL https URL com
  • SOM(自组织映射)和 K 均值有什么区别?

    stackoverflow中只有一个与此相关的问题 更多的是关于哪个更好 我只是不太明白其中的区别 我的意思是它们都使用向量 这些向量被随机分配给集群 它们都使用不同集群的质心来确定获胜的输出节点 我的意思是 差异到底在哪里 在 K 均值中
  • 如何正确验证验证码?

    我有使用验证码验证的登录表单 我在 php 文件中编写验证时遇到问题 如果验证码输入不正确 则会出现错误 目前我已经验证 如果没有输入验证码 它会显示错误 但是当我输入一些错误的验证码时 登录将继续并将用户登录到站点 这是我的代码 感谢任何
  • Maven 依赖范围未按预期工作

    Maven 2 2 1 声称支持版本范围 参见例如http www sonatype com books mvnref book reference pom relationships sect project dependency htm