【问题标题】:How does maven resolve the dependencies of the main dependencies on which our application is build?maven 如何解决构建我们应用程序的主要依赖项的依赖关系?
【发布时间】:2017-09-07 16:19:23
【问题描述】:

我正在尝试更多地了解 maven。 maven如何下载应用程序主要依赖的依赖?例如假设我的应用程序具有这样的主要依赖项:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.0</version>
    <scope>provided</scope>
</dependency>

现在,当 maven 下载这个 jar 时,它也会下载这个 jar 的依赖项。例如,请看下面的屏幕截图:

可以看出,maven 不仅下载了 hadoop-hdfs-2.7.0.jar,还下载了它的所有依赖项。

现在,我的问题是 maven 如何知道“顶级”依赖项的依赖项是什么,即在这种情况下,“顶级”依赖项是 hadoop-hdfs,所以它必须下载的所有 jar这个?

我在 hadoop-hdfs 的 .m2/respository 中也看到了这一点:

我打开了.pom文件,内容是(部分):

<project>
    ....

    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.0</version>
    <description>Apache Hadoop HDFS</description>
    <name>Apache Hadoop HDFS</name>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-annotations</artifactId>
             <scope>provided</scope>
        </dependency>

        <dependency>
             <groupId>org.apache.hadoop</groupId>
             <artifactId>hadoop-auth</artifactId>
             <scope>provided</scope>
        </dependency>
    <dependencies>

    ...
</project>

这是什么 hadoop-hdfs-2.7.0.pom ?此文件是否向 maven 提供信息,hadoop-hdfs-2.7.0.jar 需要下载哪些依赖项?

谁能帮我清除这些东西?

【问题讨论】:

    标签: maven jar maven-2 maven-3


    【解决方案1】:

    首先你是对的,hadoop-hdfs-2.7.0.pom 告诉 Maven 关于 hadoop 所依赖的库。但是,当使用 hadoop 作为项目中的依赖项,maven 使用以下策略 除了使用 hadoop-hdfs-2.7.0.pom.

    1. 如果在当前项目的dependencies标签下指定了groupid、artifactid和version的依赖,则取第一个 优先级。这就是在您的项目中添加 hadoop-hdfs 的方式。
    2. 依赖管理具有下一个优先级。当仅在依赖项标记下使用组和工件 ID 指定依赖项时 但同时,依赖项定义在 在 hadoops pom.xml 中带有版本和可传递性的dependencyManagement 标记, 将优先考虑dependencyManagement 标签下的那个。
    3. 依赖中介具有最后的优先级。使用依赖中介解决依赖关系。意思是,在你的情况下 hadoop-hdfs-2.7.0.pom 中提到的依赖项是传递的 依赖项(间接依赖于这些依赖项,因为您的 您的项目的依赖项“hadoop-hdfs”需要它)并且此过程继续进行 递归直到解决所有子依赖项。

    注意:还有排除依赖、标记等其他功能 一个可选并导入依赖项列表。但它们被使用 稀疏。更多示例信息可以在下面的 URL 中找到

    [https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management][1]

    【讨论】:

      猜你喜欢
      • 2015-11-02
      • 2022-10-04
      • 1970-01-01
      • 2021-08-24
      • 2019-04-27
      • 2014-09-05
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多