了解Eclipse Maven依赖层次结构

时间:2018-08-28 13:10:10

标签: eclipse maven pom.xml maven-dependency

我想了解多模块Maven项目的相关性以及与Eclipse依赖关系层次结构相关的内容。

我确实很了解,但是有些事情我根本听不懂。

下面是屏幕截图。

我不明白的是:

->从1.0.2 [编译}管理

->从1.0.2开始管理(与1.0.0冲突时省略)[编译]

我确实在网上搜索,但是却获得了痕迹。有人可以帮助我理解它们的含义吗?

谢谢。

enter image description here

1 个答案:

答案 0 :(得分:3)

Maven从依赖关系树构建一个平面类路径,每个用于编译[compile]用于测试用于跑步

在扁平类路径中,与OSGi不同,依赖项只能存在于一个版本中。在裁剪后的屏幕截图中,还有其他一些内容:

  • kafka-streams 1.0.2和
  • kafka-clients 1.0.0

kafka-streams 1.0.2需要kafka-clients 1.0.2 ,它与kafka-clients 1.0.0冲突。因此,kafka-streams 1.0.2由于与1.0.0冲突而被 省略,即使此处需要版本1.0.2( 从1.0.2“ )。

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

确保pom.xml 文件中指定的版本相互之间兼容(屏幕快照中尚不存在这种情况):从{0.0.1升级kafka-clients到1.0.2 (或降级其他库)。