天天看点

Maven中<dependencies>节点和<dependencyManagement>节点的区别

1.dependencymanagement 应用场景

        maven 使用dependencymanagement 元素来提供了一种管理依赖版本号的方式,通常会在一个组织或者项目的最顶层的pom中看到dependencymanagement 元素,在pom.xml 中使用dependencymanagement 元素能让所有子项目中引用一个依赖而不用显式的列出版本号。maven 会沿着父子层次向上走,直到找到一个拥有dependencymanagement 元素的项目,然后它就会使用在这个dependencymanagement 元素中指定的版本号。

        在 pom 中指明 dependency management 元素的方式 maven 结合项目继承来管理依赖,这样做的好处就是:如果有多个子项目都引用依赖项的同一版本,确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的成果,因此,应在顶层的 pom 中定义共同的依赖关系。同时可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改;另外如果某个子项目需要另外的一个版本,只需要在dependencies中声明version即可。

2.dependencymanagement和dependencies的区别

dependencies,即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项。dependencymanagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果在子项目中不写该依赖项,那么子项目中是不会从父项目继承该依赖项的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version 和 scope 都读取自父pom。

3. pom.xml中变量的使用(便于维护)

一 问题阐述

在pom.xml中添加依赖时语法如下

<dependency>

  <groupid>org.springframework</groupid>

  <artifactid>spring-core</artifactid>

  <version>1.2.6</version>

</dependency>

  <artifactid>spring-aop</artifactid>

以上内容没错,但有这样一个问题,在spring的依赖中,我们需要引用一系列版本的spring,如版本1.2.6,每次都写不利于维护。

二 解决办法

在pom.xml定义properties标签

<properties>

  <project.build.sourceencoding>utf-8</project.build.sourceencoding>

  <spring.version>1.2.6</spring.version>

  <developer.organization>xxx</developer.organization>

 </properties>

以上内容就改成了

 <version>${spring.version}</version>

  <version>${spring.version}</version>

维护的时候只需要修改properties标签,非常清晰明了。