程序员

说说 Maven dependency 与 dependency

2020-12-05  本文已影响0人  deniro

pom.xml文件中,所依赖的jar包版本,有两种判断途径1

  1. 如果dependencies里的某个dependency没有声明version元素,那么maven就会到dependencyManagement里面去找有没有同一artifactId和groupId的版本声明,如果有,就继承它,如果没有就会报错。因为每个dependency必须有一个确定的version。

  2. 如果dependencies里的某个dependency声明了version元素,那么直接以dependency里的version为准。

比如以下配置:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR8</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <!--spring-cloud-config-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
</dependencies>

因为我们在 dependencies/dependency 中都没有明确指定依赖包的版本号,所以 Maven 会在 dependencyManagement/dependencies/dependency 中查找 spring-cloud-starter-config 与 spring-cloud-config-server 的版本号。

这个示例的情况更复杂一些,因为 spring-cloud-starter-config 与 spring-cloud-config-server 的版本号并不是直接定义在 dependencyManagement 中,而是交由 spring-cloud-dependencies 统一管理,上述两个依赖包交由其统一定义。


参考资料:
【1】 Maven中的dependencyManagement 意义.

上一篇下一篇

猜你喜欢

热点阅读