【问题标题】:Why sometimes dependency not contain version property in pom.xml?为什么有时依赖项在 pom.xml 中不包含版本属性?
【发布时间】:2016-08-02 17:49:33
【问题描述】:

我是 Maven 的新手,目前正在阅读 Hadoop 源代码,在一些 pom.xml 文件中发现了一些有趣的东西:

一些依赖节点根本不包含版本节点。

问题:为什么会这样?

例如,this pom.xml

【问题讨论】:

  • 因为提到的 pom 在其顶部有一个父 pom,它指定了缺少的版本
  • 如果您在 IDE 中查看此 pom,您将在左侧看到一个链接,显示实际定义版本的位置。您还可以在一个地方获得显示所有版本的“有效 POM”。
  • @user1928863 你没有接受这个问题的任何答案。一个都不够?

标签: java maven pom.xml dependency-management


【解决方案1】:

【讨论】:

  • 定义几个依赖管理的父pom不是你提到的那个,我相信its first child(和许多模块的父,就像OP提到的那样)它是一个更好的示例。
【解决方案2】:

在 Maven 中,您可以从父文件夹继承以合并或继承某些属性。这可以是模块的版本。通常,您在项目的根文件夹中有一个“超级”POM,并将所有公共依赖项放在那里,以便以更简单的方式控制它们。 IE。如果您必须更改一个模块版本,您只需在“超级” POM 中进行更改,而不是在需要它的每个子文件夹内的每个 POM 中进行更改。如果您需要有关 POM 继承的更多信息,文档中有几个有用的示例。

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

【讨论】:

    【解决方案3】:

    正如我最初评论的那样,一个 pom 文件可以有一个父文件(通过inheritance),这样一个父文件可以为其所有子文件提供一些治理和协调。一个经典案例是通过dependencyManagement 部分为某些依赖项提供版本控制。

    POM 使用它来帮助管理其所有子项的依赖关系信息。如果my-parent 项目使用dependencyManagement 定义对junit:junit:4.0 的依赖,那么从这个继承的POM 可以设置它们的依赖,只给出groupId=junit 和artifactId=junit,然后Maven 将填写由父母。这种方法的好处是显而易见的。可以在一个中心位置设置依赖关系详细信息,这将传播到所有继承的 POM。

    提到的 pom 确实有一个父 pom:

    <parent>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-project-dist</artifactId>
       <version>3.0.0-SNAPSHOT</version>
       <relativePath>../../hadoop-project-dist</relativePath>
    </parent>
    

    链中的 another parent pom 文件定义了几个依赖项作为其依赖项管理部分的一部分。


    如果你真的想检查你的构建使用的有效(合并)pom,你可以运行:

    mvn help:effective-pom -Doutput=effective-pom.xml
    

    maven-help-plugin 将按照上面的命令生成一个额外的 pom,合并当前的 pom 文件及其所有锚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2017-12-19
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多