范围“import”和“pom”types依赖有什么区别?

从Maven 2.0.9开始,有可能包括

<type>pom</type> <scope>import</scope> 

<dependencyManagement>部分。

据我了解,它将被包含在这个pom中的依赖关系“replace”,就像它们最初在这里定义的那样。

上面的解决scheme和简单的依赖这个pom没有import范围(我看到后者被称为“依赖关系分组”)有什么区别? 唯一的区别是,这样的“分组”依赖关系具有较低的优先级,而解决依赖关系优先?

您只能导入托pipe的依赖项 。 这意味着您只能其他POM导入项目POM的dependencyManagement部分。 即

 ... <dependencyManagement> <dependencies> <dependency> <groupId>other.pom.group.id</groupId> <artifactId>other-pom-artifact-id</artifactId> <version>SNAPSHOT</version> <scope>import</scope> <type>pom</type> </dependency> </dependencies> </dependencyManagement> ... 

接下来会发生的是, other-pom-artifact-iddependencyManagement部分中定义的所有依赖包含在POM的dependencyManagement部分中。 然后,您可以在POM(及其所有子POM)的dependency部分中引用这些依赖关系,而不必包含version等。

然而,如果在你的POM中,你只需要定义一个正常的依赖到other-pom-artifact-id那么来自other-pom-artifact-iddependency部分的所有dependencies被包含在你的项目中 – 但是在dependencyManagement部分other-pom-artifact-id根本不包括在内。

所以基本上这两种不同的机制被用来导入/包括两种不同types的依赖(托pipe依赖和正常依赖)。

在maven网站上有一个很好的页面,可以比我更好地解释这个,Maven中的Dependency Management ,它也包含了关于导入依赖关系的特定信息。

您不能在其他项目中将pomtypes的项目作为simple dependency 。 (那么,你可以 – 但它不会做任何有用的事情)。 只能有一个parent-child关系。 这本质上是managing dependency through inheritance

<dependencyManagement>部分中的pomtypes依赖项的import范围允许您实现multiple inheritance的等价物。

你可以有不同的poms – 每个managing一堆相关的依赖。 使用这些项目的项目可以import这些poms ,然后指定它们所需的依赖关系,而无需担心版本。 这基本上bill of materials概念,这在@ DB5指定的链接中有说明。

这有助于避免复杂的多模块项目的parent poms变得太大而笨拙。

两个概念,非常类似于面向对象的编程范例,将有助于回答这个问题:

  1. dependencyManagement部分只声明当前项目中的依赖关系及其细节 – 目的是通过inheritance( parent )或导入( scope )来pipe理细节并在其他项目中重用。 这就像在程序中声明一个数据types并使其可用。

  2. 依赖性部分定义项目中依赖项的实际使用,可选地inheritancedependencyManagment下声明的依赖项的细节(即版本等)。 这就是为什么如果你只把它们放在dependencyManagment中,你将会失去依赖关系 。 这类似于在需要的程序中实例化数据types的variables实例。