【问题标题】:How does the Maven Transitive dependencies flow work?Maven 传递依赖流如何工作?
【发布时间】:2018-04-28 06:07:02
【问题描述】:

我是 Maven 新手,所以仍在尝试了解它是如何工作的。我有一个依赖于 A 的库 B。所以 A 是在 B 的依赖中添加的。 我有项目 C,它依赖于 BA。 因此,如果我在 C 的 POM 中添加 B 库,那么传递依赖应该可以工作,C 应该看到 A。C -> B -> A

我看到我的同事在 C 的 POM 中写了如下内容:

<dependency>
        <groupId>B</groupId>
        <artifactId>B</artifactId>
        <version>1.0</version>
        <exclusions>
            <exclusion>
                <groupId>C</groupId>
                <artifactId>C</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>C</groupId>
        <artifactId>C</artifactId>
        <version>1.0</version>
    </dependency>
</dependencies>

当我查看 B 的 pom 时,我发现没有包装信息。所以它既不是罐子也不是战争。它只是被用作一个库。

我的问题是,库(B)的依赖模块是否作为传递依赖项传递给在其依赖项中使用库(B)的项目(C)。

【问题讨论】:

  • 排除一个工件只是为了再次添加它是没有意义的。你的同事做错了什么,特别是如果没有 cmets 来解释他为什么这样做。
  • 我已经更新了我的问题。请您再检查一下。
  • 我回答了问题,但代码与问题不匹配。您应该编辑源代码以使所有内容保持一致。

标签: java spring maven jakarta-ee pom.xml


【解决方案1】:

是的:Maven 解析整个依赖树,然后相应地配置您的项目。你可以看到这个分辨率与目标dependency:tree

当您在项目 C 中包含 B 时,Maven 会读取 Bpom.xml,其中包含 A 及物。然后,Maven 会展平这棵树,解决冲突(如果有),并为您的项目配置两个依赖项。

您的项目 C 现在可以访问 AB,就好像它们已集成一样。


请注意,Eclipse 中的 Maven 插件(如果您使用它)非常聪明,并且可以决定直接使用 JAR 或项目文件(如果它在您的工作区中可用)。这可能会导致一些混乱,但没问题;它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2013-02-17
    • 2019-08-23
    • 2019-10-29
    • 2021-10-24
    • 2011-04-10
    相关资源
    最近更新 更多