是什么作用域“进口”,“甲醛”依赖型与无“进口”有什么区别?是什么作用域“进口”,“甲醛”依赖型与无

2019-05-12 23:10发布

从Maven的2.0.9起有可能包括

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

<dependencyManagement>部。

据我了解,这将是“改为”与包括在此POM的依赖关系,就好像它们最初这里定义。

是什么这个POM无解的上方,简单的依赖之间的区别import范围(我看到后者被称为“依赖分组”)? 是唯一的区别,这种“分组”的依赖有在解析依赖优先级较低的优先级?

Answer 1:

您只能导入管理依赖 。 这意味着你只能导入其他的POM到dependencyManagement你项目的POM的部分。 即

...
<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>
...

那么,什么情况是,在定义的所有依赖dependencyManagement一节的other-pom-artifact-id都包含在你的POM的dependencyManagement部分。 然后,您可以在参考这些依赖dependency你的POM(及其所有子多金属氧酸盐)的部分,而不必包含version等。

但是,如果在你的POM你简单地定义一个正常依赖于other-pom-artifact-id ,那么所有dependenciesdependency一节的other-pom-artifact-id在你的项目及物包括-但依赖于定义dependencyManagement部分的的other-pom-artifact-id不包括在所有。

所以基本上两种不同的机制被用于导入/包括两种不同类型的依赖关系(管理依赖性和正常的依赖关系)。

这是一个很好页面maven的网站上,这可以解释这远比我能更好, 依赖管理Maven中 ,它也包含了特定的信息导入的依赖 。



Answer 2:

你不能有一个pom项目类型为simple dependency于另一个项目。 (嗯,你可以 - 但它不会做任何有用)。 只能有一个parent-child关系。 这基本上是managing dependency through inheritance

import用于范围pom在类型依赖<dependencyManagement>部分,可以实现相当于multiple inheritance

你可以有不同的poms -每个managing一堆相关的依赖。 它使用这些可以在项目import这些poms然后指定他们需要,而无需担心版本的依赖关系。 这实质上是bill of materials概念,这是在由@ DB5中指定的链接示出。

这有助于保持parent poms复杂的多模块项目过于庞大而笨重。



Answer 3:

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

  1. dependencyManagement部分只声明依赖及其详细信息在当前项目-目的是细节管理和再利用等项目,无论是通过继承( )或进口( 范围 )。 这就像是在宣告程序中的数据类型,并使其可用。

  2. 依存部分定义该项目实际使用的依赖关系,可选择继承dependencyManagment下宣布的依赖关系的细节(即,版本等)。 这就是为什么你会缺少相关性,如果你只把他们dependencyManagment。 这类似于在它需要有一个程序实例化数据类型的变量的实例。



文章来源: What is the difference between “pom” type dependency with scope “import” and without “import”?