第5章 maven继承特性

第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,依赖关系如图:

Alt text

这时,创建一个crm-parent项目,在项目中配置所有需要使用的依赖和属性,其他项目继承这个项目,则会自动引入,关系如图:

Alt text

Alt text


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也类似,所以不多讲了。


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

posted @ 2015-11-11 20:06  _JA  阅读(321)  评论(0编辑  收藏  举报