maven的多項目結構中,可以使用parent定義起父項目,從而從父項目中繼承依賴等屬性。但是美中不足,maven只能單繼承,即一個項目只能使用parent標簽定一個父級項目。
maven2.9之后的版本引入了一個新的功能,可以實現依賴上的多繼承。這個功能,可以將依賴配置復雜的pom文件拆分成多個獨立的pom文件,一是可以使maven的pom配置更加簡潔,
另一個是,可以復用這些pom依賴。
這一點可以參考springboot的maven配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.3.RELEASE</version> </dependency>
如上面這一行依賴就可以構建一個完整的springbootweb項目,實際上這行依賴簡介包含了許多個依賴,如spring核心的幾大依賴包等等。而springboot能做到這一點就是利用了這個新功能。
接下來說如何使用這個新功能:
1. 首先需要單獨編輯一個pom文件,定義需要的依賴,作為可被直接引用的依賴:
<?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> <groupId>com.xuzimian.global.demo</groupId> <artifactId>spring-core</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <properties> <spring.version>4.3.9.RELEASE</spring.version> </properties> <dependencyManagement> <dependencies> <!-- 添加Spring依賴的jar包--> <!--依賴注入包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!--切片包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- Beans包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- 容器包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- 容器依賴包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- 核心包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- 表達式包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
注意:依賴只能放在dependencyManagement中,如果需要被多繼承的話。
2. 在需要引用的項目pom文件中,加入對上面的pom引用:
<dependencyManagement> <dependencies> <dependency> <groupId>com.xuzimian.global.demo</groupId> <artifactId>spring-core</artifactId> <version>1.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:scope必須是import
3. 將第一步中的單獨pom文件,存放到本地或者遠程maven倉庫的對應目錄下:

注意:該pom文件的命名必須符合{artifactId}.{version}.pom 格式,如果本地或者遠程倉庫上沒有這個對應的pom文件,則執行mvn命令時就會出現如下錯誤:
Non-resolvable import POM: Could not transfer artifact
經過上面1,3兩步之后,就可以在任何項目里面使用
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.xuzimian.global.demo</groupId>
<artifactId>spring-core</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
這一段配置引入第一步的獨立pom文件的所有spring依賴了,當然,也可以配置多個獨立的pom,在項目中使用多個繼承依賴。
