使用parent控制版本依赖是很常见的事情。相似于java中的父子类继承关系,子类能够引用父类中非private的变量和方法,Maven中的parent定义是相似的,继承者能够直接使用parent中的maven depandencies。java
在作多项目依赖状况是,咱们经常会建立一个项目提供基础依赖。建立一个parent项目,打包类型为pom,parent项目中不存听任何代码,只是管理多个项目之间公共的依赖。在parent项目的pom文件中定义对common.jar的依赖,ABC三个子项目中只须要定义<parent></parent>,parent标签中写上parent项目的pom坐标就能够引用到common.jar了。spring
若是AB中分别定义对springmvc.jar的依赖,当springmvc.jar版本变化时修改起来又会很麻烦。解决办法是在parent项目的pom文件中使用<dependencyManagement></dependencyManagement>将springmvc.jar管理起来,若是有哪一个子项目要用,那么子项目在本身的pom文件中使用。apache
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.13.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.sankuai.meituan.waimai</groupId> <artifactId>waimai-dependencies</artifactId> <version>1.3.9.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <springframework.version>4.3.12.RELEASE</springframework.version> <springboot.version>1.5.8.RELEASE</springboot.version> </properties> <dependencyManagement> <dependencies> <!-- 统一管理Spring依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-framework-bom</artifactId> <version>${springframework.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--经过Spring Boot管理其余第三方版本--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--其余--> </dependencies> </dependencyManagement> </project>
基础依赖中包含了spring依赖和springboot依赖。springboot
依赖放在dependencyManagement中,而且指定 <type>pom</type> 和 <scope>import</scope>,import 是 <scope> 中最特别的一个类型,这个类型只能用于这种状况。mvc
依赖中的顺序,越靠前面优先级越高。maven
import只在dependencyManagement元素下才有效果,做用是将目标POM中的dependencyManagement配置导入并合并到当前POM的dependencyManagement元素中。spring-boot