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

这时,创建一个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

第5章 maven继承特性的相关文章

第6章 maven聚合特性

第6章 maven聚合特性 本章用一个例子介绍maven的聚合特性. 6.1 什么是聚合 在上一章中,我们讲解了maven的继承特性,他可以使子项目直接引用父项目定义的依赖和插件.那么,如果有多个子项目,如何通过父项目进行管理,这就需要考虑使用聚合特性.所以,maven聚合特性可以把多个项目模块聚合在一起构建. 6.2 如何使用 还是拿上章的项目来演示,首先在crm-parent中增加标签 标签中是所管理的子项目相对路径. <modules> <module>../crm-dao&

C++中类的继承特性

整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分. 可以说这一章节的内容是c++面向对象程序设计的关键. 下面我们简单的来说一下继承的概念,先看下图: 上图是一个抽象描述的特性继承表 交通工具是一个基类(也称做父类),通常情况下所有交通工具所共同具备的特性是速度与额定载人的数量,但按照生活常规,我们来继续给交通工具来细分类的时候,我们会分别想到有汽车类和飞机类等等

第1章 maven概览及快速入门

第1章 maven概览及快速入门 本章以尽可能简单.通俗易懂的语言介绍了maven,以及maven的安装和入门操作命令. 1.1 什么是maven 比较正式语言: maven是一个项目构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署: maven不仅是构建工具,还是一个依赖管理和项目信息管理工具.还提供了中央仓库,能帮我们自动下载依赖包. 通俗讲: - maven可以帮你编译和打包(当然ant也可以,但maven更简单),也可以帮你自动导入jar包,还能完成自动化

第9章 maven的插件和生命周期

第9章 maven的插件和生命周期 本章介绍了maven生命周期.插件以及如何配置插件 9.1 生命周期 一般的项目都会经历这几个步骤:编译,测试,打包,部署,有些公司是手动方式,有些是自动化脚本方式,虽然方式类似,但不可能完全相同.maven对这些工作进行抽象和统一,总结了一套完善的生命周期. 9.1.1 三套生命周期 maven的三套生命周期分别是:clean.default.site,每个周期都分为多个阶段. 9.1.2 clean生命周期 1.pre-clean:执行清理前需要完成的工作

简单理解JavaScript中的封装与继承特性_基础知识

JavaScript中的封装封装简单地说就是让外界只能访问对象的共有变量和函数,隐藏细节和数据. js中有三种方法创建对象,分别为门户大开型.用命名规范区分私有变量.闭包创建真正的私有变量三种. 1.门户大开型,是实现对象的最基础的方法,所有方法与变量都是共有的外界可以访问. var Book = function(name){ if(this.check(name)){ console.log("error"); throw new Error("name null&quo

解析Swift语言面相对象编程中的继承特性_Swift

取大于形态的能力被定义为继承.一般一个类可以从另一个类继承属性和方法.类可以进一步划分到子类和超类. 子类:当一个类从另一个类继承属性,方法和功能被称为子类 超类:类包含属性,方法和功能被其它类继承称为超类 Swift 中类包含父类和调用访问方法,属性,功能和重写方法.另外,属性观察者也用于添加属性和修改所存储的或计算的特性的方法. 基类一个类如果不从其它类继承方法,属性或功能,那么它被称为"基类". 复制代码 代码如下: classStudDetails{var stname:Str

理解Objective-C的变量以及面相对象的继承特性_IOS

OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 复制代码 代码如下: #import <Foundation/Foundation.h> @interface Person : NSObject {     int _age;//默认为@protected } - (void)setAge:(int)age; - (int)age; @end Person类的实现: 复制代码 代码如下: #import "Person.h" @impleme

详解JavaScript中基于原型prototype的继承特性_基础知识

JavaScript 中的继承比较奇葩,无法实现接口继承,只能依靠原型继承. 原型链原型就是一个对象,通过构造函数创建出来的实例会有指针指向原型得到原型的属性和方法.这样,实例对象就带有构造函数的属性方法和原型的属性方法,然后将需要继承的构造函数的原型指向这个实例,即可拥有这个实例的所有属性方法实现继承. 看下面演示代码: //声明超类,通过构造函数和原型添加有关属性和方法 function Super(){ this.property = true; } Super.prototype.get

JavaScript程序中实现继承特性的方式总结_基础知识

概述JavaScript的所有对象,都有自己的继承链.也就是说,每个对象都继承另一个对象,该对象称为"原型"(prototype)对象.只有null除外,它没有自己的原型对象. 原型对象的重要性在于,如果A对象是B对象的原型,那么B对象可以拿到A对象的所有属性和方法.Object.getPrototypof方法用于获取当前对象的原型对象. var p = Object.getPrototypeOf(obj); 上面代码中,对象p就是对象obj的原型对象. Object.create方法