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

-
如果dependencies里的某个dependency没有声明version元素,那么maven就会到dependencyManagement里面去找有没有同一artifactId和groupId的版本声明,如果有,就继承它,如果没有就会报错。因为每个dependency必须有一个确定的version。
-
如果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 意义.
网友评论