第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配置:
<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>
<!-- spring 依赖 -->
<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>
<!-- hibernate 依赖 -->
<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对应的依赖的配置。
<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也类似,所以不多讲了。
首页传送门
时间: 2024-11-05 14:44:58