范围“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-id
的dependencyManagement
部分中定义的所有依赖包含在POM的dependencyManagement
部分中。 然后,您可以在POM(及其所有子POM)的dependency
部分中引用这些依赖关系,而不必包含version
等。
然而,如果在你的POM中,你只需要定义一个正常的依赖到other-pom-artifact-id
那么来自other-pom-artifact-id
的dependency
部分的所有dependencies
被包含在你的项目中 – 但是在dependencyManagement
部分other-pom-artifact-id
根本不包括在内。
所以基本上这两种不同的机制被用来导入/包括两种不同types的依赖(托pipe依赖和正常依赖)。
在maven网站上有一个很好的页面,可以比我更好地解释这个,Maven中的Dependency Management ,它也包含了关于导入依赖关系的特定信息。
您不能在其他项目中将pom
types的项目作为simple dependency
。 (那么,你可以 – 但它不会做任何有用的事情)。 只能有一个parent-child
关系。 这本质上是managing dependency through inheritance
。
在<dependencyManagement>
部分中的pom
types依赖项的import
范围允许您实现multiple inheritance
的等价物。
你可以有不同的poms
– 每个managing
一堆相关的依赖。 使用这些项目的项目可以import
这些poms
,然后指定它们所需的依赖关系,而无需担心版本。 这基本上bill of materials
概念,这在@ DB5指定的链接中有说明。
这有助于避免复杂的多模块项目的parent poms
变得太大而笨拙。
两个概念,非常类似于面向对象的编程范例,将有助于回答这个问题:
-
dependencyManagement部分只声明当前项目中的依赖关系及其细节 – 目的是通过inheritance( parent )或导入( scope )来pipe理细节并在其他项目中重用。 这就像在程序中声明一个数据types并使其可用。
-
依赖性部分定义项目中依赖项的实际使用,可选地inheritancedependencyManagment下声明的依赖项的细节(即版本等)。 这就是为什么如果你只把它们放在dependencyManagment中,你将会失去依赖关系 。 这类似于在需要的程序中实例化数据types的variables实例。