maven 对于依赖项使用和不使用pom有什么区别< type>< /type>(在部分中< dependencies>)?

taor4pac  于 2023-05-22  发布在  Maven
关注(0)|答案(2)|浏览(225)

我真的找不到任何关于这方面的文件。然而,我有时会在一些pom.xml文件的<dependencies>部分看到这一点:

<dependency>
    <groupId>com.group.id</groupId>
    <artifactId>artifact-id</artifactId>
    <version>1.0.0</version>
    <type>pom</type>
</dependency>

但我无法理解其中的区别:

<dependency>
    <groupId>com.group.id</groupId>
    <artifactId>artifact-id</artifactId>
    <version>1.0.0</version>
</dependency>

据我所知,<type>pom</type>只与<dependencyManagement>部分中的依赖项相关。
我不明白它在<dependencies>部分怎么会有用。

h79rfbju

h79rfbju1#

使用案例:
在大多数项目中,您总是有相同的五个依赖项。但是你不能通过父POM来处理这个问题,因为你已经需要使用固定的父POM。
然后,您可以创建一个pom类型的项目onlypom,该项目仅包含具有上述五个依赖项的pom.xml。然后在项目<dependencies>部分中添加pom类型的onlypom依赖项,这样就可以避免总是复制/粘贴五个依赖项条目。

ffx8fchx

ffx8fchx2#

只能导入托管依赖项。这意味着您只能将其他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)的依赖项部分引用这些依赖项,而不必包括版本等。
但是,如果在POM中,您只是简单地定义了对other-pom-artifact-id的普通依赖项,那么other-pom-artifact-id的dependency部分中的所有依赖项都将传递性地包含在您的项目中-但是other-pom-artifact-id的dependencyManagement部分中定义的依赖项根本不包含在内。
因此,基本上两种不同的机制用于导入/包括两种不同类型的依赖关系(托管依赖关系和普通依赖关系)。
在maven网站上有一个很好的页面,它可以比我更好地解释这一点,Maven中的依赖管理,它还包含有关导入依赖项的特定信息。

相关问题