- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 Maven 中,您可以通过 dependencyManagement 中的条目覆盖传递依赖项的版本号,因为 dependencyManagement 优先于传递依赖项定义。
但是(传递)依赖项的 pom 中的 dependencyManagement 定义呢?他们被考虑了吗?如果是这样,它们覆盖了什么,它们是如何被覆盖的?
最佳答案
依赖管理暗示是可传递的。不需要为此制定特殊规则,而是已经提到的规则的结果:Transitive Dependencies .
考虑这个示例结构:
A
- 依赖
D
- 传递依赖B
- 依赖
D
- 传递依赖当 A
或 B
构建时,它们相应的 dependencyManagement
部分被检查以选择 D
的版本,如果没有明确指定。 这是重要的部分:当 A
或 B
用作依赖项以确定 D< 的版本时,使用完全相同的过程
他们依赖。因此,它们不会以任何方式相互影响。
例如,这可能导致 A
取决于 D:1.0
,而 B
取决于 D:1.1
,它们的 dependencyManagement
部分已经在此时应用以确定这一点,将不再考虑。将此信息作为输入,应用依赖调解规则为您的模块只选择一个版本的 D
。
依赖调解规则也在链接页面中描述。但简而言之,最接近的定义获胜,平局根据顺序被打破。自然地,模块本身中的定义总是最接近的。
现在假设您的模块被用作依赖项。由于 dependencyManagement
部分中的定义,您的项目可能依赖于基于上述所有规则的 D:1.2
,但这就是您的 dependencyManagement
结束。
(请注意,
import
作用域是一个异常(exception),因为它的行为与其他作用域完全不同。)
关于java - dependencyManagement 的传递效应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38824870/
我们知道,子模块可以通过继承获得父模块中声明的全部依赖,这样虽然避免了在各个子模块 POM 中重复进行依赖声明,但也极有可能造成子模块中引入一些不必要的依赖。为此 Maven 引入了 dependen
在 Maven 中,您可以通过 dependencyManagement 中的条目覆盖传递依赖项的版本号,因为 dependencyManagement 优先于传递依赖项定义。 但是(传递)依赖项的
我不知道这是一个错误还是预期的功能,但是如果依赖项位于依赖部分都是自己的。但是,当您将它们移动到“dependencyManagement”节点(对基于模块的项目有用)时,这些选项卡将不再起作用。 有
dependencyManagement 和 dependency 之间有什么区别?我已经在 Apache Maven 网站上看到了文档。似乎在 dependencyManagement 下定义的依赖
考虑使用 maven 3.6.2 遵循 pom.xml 4.0.0 foo bar 1.0.0 org.jdbi jdbi3-jackson2
我的项目和我的父 pom 都有一个依赖管理部分。这些部分都有 boms 的直接条目和“导入”(即纯粹由 dependentecyManagement 组成并被导入的 poms)。现在我尝试找出评估顺序
我有一个布局如下的多模块项目: pom.xml projA trunk pom.xml projA1 pom.xml projA2 pom.xml
我们使用的是 maven 2.1.0。我有多个完全独立的模块,但仍然有许多共同的依赖关系。像 log4J,但有些模块不需要它。我想知道在 的一个父文件中声明所有常见依赖项是否是个好主意。部分还是有更
我的项目应该从自定义父项继承,同时使用 Spring Boot .标准解决方案是使用 部分描述here . 问题是当 Spring Boot依赖项被添加到该部分,maven 没有看到任何单元测试(测试
我的项目应该从自定义父项继承,同时使用 Spring Boot .标准解决方案是使用 部分描述here . 问题是当 Spring Boot依赖项被添加到该部分,maven 没有看到任何单元测试(测试
我对 optional dependencies 的机制有点困惑在 Maven 工作。似乎可选依赖项只有在直接指定时才有效,而不是通过依赖项管理。 我创建了三个测试项目 p1-p3,具有依赖关系: p
我知道我可以使用存储库中所谓的 BOM 将 dependencyManagement 条目导入 POM。我想知道是否有类似的机制来引用同一项目中的文件。 我们在从 Ant 到 Maven 的自动转换步
我认为来自 parent 的 dependencyManagement 是可传递的,不是吗?从来没有在文档中明确看到这一点,但对我来说这似乎很明显...... 这是我所拥有的: +----------
我正在尝试将 Spring Cloud Stream 应用程序构建脚本移植到 Kotlin。到目前为止,一切都很好,除了依赖管理 block 。很难在网中找到任何东西。样本也不涵盖该主题。 如何将以下
在我的 pom 文件中,我有以下内容: org.springframework.boot spring-boot-depe
我为这个问题创建了一个示例项目:https://github.com/robeatoz/flatten-resolve-dependency-management-without-inherited
我正在使用 Gradle Spring dependency-manager plugin用于在项目中导入 Maven BOM 定义。而且我需要排除 BOM 中定义的一个模块。 做这样的事情会很好,但
我正在尝试关注 this Spring Boot/Vaadin guide 然而 我使用的是 Gradle,而不是 Maven。 在该指南的最顶部,他们说要使用以下 Maven XML:
我需要从类似于 org.springframework.boot.spring-boot-dependency 的 BOM 中获取类似“jackson.version”的属性。我知道我可以通过使用 d
我运行 wsgen在它自己的配置文件中,因为我不希望它在我每次构建产品时都运行。但是我在运行它时收到有关缺少版本的错误: $ mvn package -P wsgen [INFO] Scanning
我是一名优秀的程序员,十分优秀!