使用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