第5章 maven继承特性
本章尽量用通俗的语言来介绍maven的继承特性。
5.1 什么是继承特性
在代码中,child类继承了parent类,那么child具有父类的所有属性。
在maven中也类似,父项目pom文件中定义的属性、依赖等配置都可以让子项目pom继承。
5.2 如何使用
假设我们在开发一个CRM项目,首先定义几个maven实际项目,crm-dao,crm-service,crm-web,这几个项目是同级的,crm-web依赖crm-service,crm-service依赖service-dao,依赖关系如图:
这时,创建一个crm-parent项目,在项目中配置所有需要使用的依赖和属性,其他项目继承这个项目,则会自动引入,关系如图:
crm-parent的pom配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| <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.crm</groupId> <artifactId>crm-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
<name>crm-parent</name> <url>http://maven.apache.org</url>
<properties> <spring.version>3.1.0.RELEASE</spring.version> <hibernate.version>3.5.6-Final</hibernate.version> <jdk.version>1.7</jdk.version> <junit.version>3.8.1</junit.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> </dependencies> </dependencyManagement>
</project>
|
重点:
- parent项目的
<packaging>
pom</packaging>
方式是pom,这个项目可以没有任何代码,只需要pom.xml即可。
<properties>
中定义了所有项目模块用到的版本及常量,统一在parent中管理,这样可以避免多模块版本和常量混乱。
<dependencyManagement>
中定义了所有需要的依赖关系(假设使用hibernate、springmvc框架)。
子模块配置:
crm-dao 是数据操作模块,所有需要引入hibernate对应的依赖的配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <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>
<artifactId>crm-dao</artifactId> <packaging>jar</packaging>
<name>crm-dao</name> <url>http://maven.apache.org</url>
<parent> <groupId>com.crm</groupId> <artifactId>crm-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../crm-parent/pom.xml</relativePath> </parent>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency>
</dependencies> </project>
|
基于上述配置,我们发现crm-dao已经自动引入了hibernate包,而且版本是我们在parent中定义的版本。
说明:
<parent>
标签中,定义了父项目的坐标及相对路径。
<dependency>
中无需在定义依赖的版本,他已经在父类中统一管理。
crm-service、crm-web也类似,所以不多讲了。