作用域为“import”的“pom”类型依赖项与不具有“import”的“pom”类型依赖项之间有什么区别?

2022-08-31 07:51:12

从 Maven 2.0.9 开始,可以包含

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

在本节中。<dependencyManagement>

据我所知,它将被这个pom中包含的依赖项“替换”,就好像它们最初是在这里定义的一样。

上面的解决方案和这个没有作用域的简单依赖性有什么区别(我看到后者被称为“依赖性分组”)?在解析依赖关系优先级时,此类“分组”依赖项具有较低优先级的唯一区别是什么?import


答案 1

只能导入托管依赖项。这意味着您只能将其他 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>
...

然后发生的事情是,在 部分定义的所有依赖项都包含在 POM 的部分中。然后,您可以在POM(及其所有子POM)的部分中引用这些依赖项,而不必包含等。dependencyManagementother-pom-artifact-iddependencyManagementdependencyversion

但是,如果在POM中,您只是简单地定义了一个正常的依赖项,那么该部分的所有内容都将传递地包含在您的项目中 - 但是,在 部分中定义的依赖项根本不包括在内。other-pom-artifact-iddependenciesdependencyother-pom-artifact-iddependencyManagementother-pom-artifact-id

因此,基本上,两种不同的机制用于导入/包含两种不同类型的依赖项(托管依赖项和普通依赖项)。

Maven网站上有一个很好的页面,它可以比我更好地解释这一点,Maven中的依赖关系管理,它还包含有关导入依赖关系的特定信息。


答案 2

不能将类型项目作为另一个项目中的类型项目。(好吧,你可以 - 但它不会做任何有用的事情)。只能有关系。这本质上是 .pomsimple dependencyparent-childmanaging dependency through inheritance

import部分中类型依赖关系的作用域允许您实现等效于 。pom<dependencyManagement>multiple inheritance

你可以有不同的 - 每个都有一堆相关的依赖项。使用这些的项目可以这些,然后指定它们所需的依赖项,而不必担心版本。这本质上是一个概念,在@DB5指定的链接中进行了说明。pomsmanagingimportpomsbill of materials

这有助于防止复杂的多模块项目变得太大和笨拙。parent poms


推荐