【问题标题】:Why are POM-typed dependencies not shown as transitive dependencies in the Maven tree?为什么 POM 类型的依赖项在 Maven 树中没有显示为传递依赖项?
【发布时间】:2013-12-22 12:28:32
【问题描述】:

当我有一个包含 POM 的项目时,例如像这样:

<dependency>
<groupId>org.jboss.arquillian</groupId
<artifactId>arquillian-bom</artifactId
<version>1.1.2.Final</version>  
<type>pom</type
<scope>test</scope>
</dependency>

那么 POM 就真正下载到了我的本地存储库中。并且 POM 包含一个依赖项列表(我可以在我的本地 repo 中检查 POM 文件,有dependenManagement 标签,并在下面列出了很多依赖项,例如 arquillian-config-api、shrinkwrap-descriptors-bom 等。 .),但这些依赖项未在 mvn dependency:tree 中列出。依赖树如下所示:

...
\- org.jboss.arquillian:arquillian-bom:pom:1.1.2.Final:test
(no more lines below it)
...

但实际上我希望 Maven 将这些依赖项显示为传递依赖项。当依赖的类型是 JAR 类型时,传递的依赖就真正显示出来了。

不知何故,我想我在使用 Maven 时不明白“pom”类型的含义是什么。

直到现在,我认为它只是意味着它不是一个工件,它只是一个插入到引用它的 POM 中的 POM。所以当我包含一个POM类型依赖的时候,POM类型依赖的依赖就包含进来了。

但似乎我弄错了,互联网上的 Maven 文档并没有帮助我解决这个问题。

有什么想法吗?

【问题讨论】:

  • 这个答案应该对你有所帮助:stackoverflow.com/a/11779302/1570834。基本上,在dependencyManagement 部分中定义的依赖项是托管依赖项,它们不包含传递性。如果 arquillian-bom 定义了 dependencies 部分,您只会看到 dependency:tree 输出中列出的依赖项 - 但它没有,因此您看不到任何传递依赖项。

标签: java maven pom.xml


【解决方案1】:

POM 类型依赖通常用于在父子关系依赖层次结构中表示父项目。默认情况下,POM 类型的项目工件不会在 Maven 反应器中展开。只有当在 reactor 中构建 jar、war 等具体类型时,才会创建并扩展依赖树以进行调试日志记录。

但是你不应该太担心它。如果您想交叉检查这些,那么 POM 编辑器中的 eclipse pom 依赖层次结构和有效的 pom 选项卡应该会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2022-12-06
    • 1970-01-01
    • 2023-02-14
    • 2019-04-16
    • 2021-12-18
    相关资源
    最近更新 更多