9

我想了解多模块 maven 项目的依赖关系以及称为 eclipse 依赖层次结构的依赖关系。

我确实理解得相当清楚,但是有些事情我根本无法理解。

下面是屏幕截图。

我不明白的事情是:

--> 从 1.0.2 开始管理 [编译}

--> 从 1.0.2 管理(因与 1.0.0 冲突而省略)[编译]

我确实在网上搜索过,但我得到了痕迹中的信息。任何人都可以帮助我理解它们易于理解的含义吗?

谢谢。

在此处输入图像描述

4

1 回答 1

8

Maven 从依赖树构建一个扁平的类路径,分别用于编译[compile])、测试运行

在平面类路径中,与 OSGi 不同,依赖项只能存在于一个版本中。在您裁剪的屏幕截图中,除其他外,还有第二级:

  • kafka-streams1.0.2 和
  • kafka-clients1.0.0

kafka-streams1.0.2 需要与1.0.0冲突的kafka-clients 1.0.2 。kafka-clients因此,即使此处需要 1.0.2 版本(“从 1.0.2 管理” ),也会因与 1.0.0 冲突而省略kafka-streams1.0.2 。

更详细:
用于编译或运行普通 Java 应用程序的类路径是平面的:所有必需的库都全局指定为有序列表。不能对一个包使用特定版本的库,而对另一个包使用不同版本的相同库。
在 Maven 中,依赖项构建了一棵树:每个依赖项都可能有自己的依赖项。Maven 将依赖树映射到类路径,这是一个有序的库列表。如果在 Maven 依赖树中相同的库存在于不同的版本中,则无法创建平面类路径。这是一个冲突。
通过选择一个版本并省略所有其他版本来解决此冲突。在使用选择版本而不是所需版本的地方,(managed from <required but not picked version>)以及(omitted for conflict with <picked version to use instead>)被展示。
此外,Maven 可以创建不同的类路径来编译、测试或通过所谓的范围运行 Java 应用程序。[compile]范围是在所有任务中使用库的默认范围:编译、测试和运行。

确保文件中指定的版本相互pom.xml兼容(屏幕截图中尚未出现这种情况):您必须从 1.0.0升级kafka-clients到 1.0.2(或降级其他库)。

于 2018-08-28T13:49:25.210 回答