我想了解多模块 maven 项目的依赖关系以及称为 eclipse 依赖层次结构的依赖关系。
我确实理解得相当清楚,但是有些事情我根本无法理解。
下面是屏幕截图。
我不明白的事情是:
--> 从 1.0.2 开始管理 [编译}
--> 从 1.0.2 管理(因与 1.0.0 冲突而省略)[编译]
我确实在网上搜索过,但我得到了痕迹中的信息。任何人都可以帮助我理解它们易于理解的含义吗?
谢谢。
我想了解多模块 maven 项目的依赖关系以及称为 eclipse 依赖层次结构的依赖关系。
我确实理解得相当清楚,但是有些事情我根本无法理解。
下面是屏幕截图。
我不明白的事情是:
--> 从 1.0.2 开始管理 [编译}
--> 从 1.0.2 管理(因与 1.0.0 冲突而省略)[编译]
我确实在网上搜索过,但我得到了痕迹中的信息。任何人都可以帮助我理解它们易于理解的含义吗?
谢谢。
Maven 从依赖树构建一个扁平的类路径,分别用于编译([compile]
)、测试和运行。
在平面类路径中,与 OSGi 不同,依赖项只能存在于一个版本中。在您裁剪的屏幕截图中,除其他外,还有第二级:
kafka-streams
1.0.2 和kafka-clients
1.0.0。kafka-streams
1.0.2 需要与1.0.0冲突的kafka-clients
1.0.2 。kafka-clients
因此,即使此处需要 1.0.2 版本(“从 1.0.2 管理” ),也会因与 1.0.0 冲突而省略kafka-streams
1.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(或降级其他库)。