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

简介: 1.dependencyManagement 应用场景        Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式,通常会在一个组织或者项目的最顶层的POM中看到dependencyManagement 元素,在pom.xml 中使用dependencyManagement 元素能让所有子项目中引用一个依赖而不用显式的列出版本号。Maven

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>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>1.2.6</version>
</dependency>


以上内容没错,但有这样一个问题,在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>


以上内容就改成了


<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
 <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>${spring.version}</version>
</dependency>
维护的时候只需要修改properties标签,非常清晰明了。


本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1643709

目录
相关文章
|
4月前
|
Java Maven Spring
Maven高级-继承、实施步骤及聚合与继承的区别
Maven高级-继承、实施步骤及聚合与继承的区别
48 0
|
5月前
|
Java 测试技术 Maven
maven跳过单元测试-maven.test.skip和skipTests的区别
maven跳过单元测试-maven.test.skip和skipTests的区别
|
2月前
|
Java Linux Apache
Maven的Binary与Source区别
Maven的Binary与Source区别
41 1
|
4月前
|
Java Maven Spring
StringUtils工具类的maven坐标以及StringUtils.isBlank()和StringUtils.isEmpty()的区别
StringUtils工具类的maven坐标以及StringUtils.isBlank()和StringUtils.isEmpty()的区别
30 0
|
5月前
|
Java Unix Linux
M2_HOME还是MAVEN_HOME配置环境变量,有什么区别?
M2_HOME还是MAVEN_HOME配置环境变量,有什么区别?
|
5月前
|
测试技术
Maven-DskipTests和-Dmaven.test.skip=true的区别
Maven-DskipTests和-Dmaven.test.skip=true的区别
214 6
|
10月前
|
Java Maven
maven工程和模块的区别
maven工程和模块的区别
|
10月前
|
XML Java 测试技术
Maven的dependencies
Maven的dependencies
|
11月前
|
Java easyexcel Maven
maven中dependencyManagement与dependencies的区别与联系
maven中dependencyManagement与dependencies的区别与联系
350 0
|
12月前
|
Java Maven 开发者