MAVEN的继承:坐标的继承

两个不同的项目模块

crmx2-comm模块

<project>
    <groupId>cn.ikantalk.crmx2</groupId>
    <artifactId>crmx2-comm</artifactId>
    <version>1.0.0</version>
    <name>CRM Comm Module</name>
    <packaging>jar</packaging>
    ......
</project>

crmx2-core模块

<project>
    <groupId>cn.ikantalk.crmx2</groupId>
    <artifactId>crmx2-core</artifactId>
    <version>1.0.0</version>
    <name>CRM Comm Module</name>
    <packaging>jar</packaging>
    ......
</project>

分析

通过对两个项目的pom.xml的对比,发现很多元素及元素值都是重复的,例如:groupId, version,packaging 等。

在java开发中,重复的内容通常都会被提取出来,归纳到父类中,而各自的特性做为子类的定义,并继承父类,以达到代码重用的目的。这种设计的优点就不用赘述了。

在maven中也有类似的机制来实现这种设计思路:定义一个父pom.xml,用于子pom.xml的继承,将原有的在各个子类中重复的定义 的内容都放到父pom.xml中。

如何继承

目录结构

将要创建的目录结构如下:

|_pom.xml //父pom
|_crmx2-core
    |_pom.xml //子pom
|_crmx2-comm
    |_pom.xml //子pom

根据父pom.xml与子pom.xml的位置关系,来调整子pom中的relativePath元素的值。见下面的子pom.xml的定义。

创建用于被继承的父pom.xml

<project>
    <groupId>cn.ikantalk.crmx2</groupId>
    <artifactId>crmx2-parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>CRMx2 Parent Pom</name>
</project>

注意:
1. packaging元素的值必须是:pom,和聚合一样。
2. groupId和version元素的值与原有的两个子pom.xml的值相同

修改子pom.xml

<proejct>
    <parent>
        <groupId>cn.ikantalk.crmx2</groupId>
        <artifactId>crmx2-parent</artifactId>
        <version>1.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>crmx2-comm</artifactId>
    <name>CRMx2 Comm</name>
</project>

注意:
1. 子pom.xml中多了parent元素,在parent元素中指明了父pom.xml的坐标,同时使用relativePath指明了父pom.xml的相对位置。如上,realtivePath的值,说明父pom.xml文件在当前目录的上一层。
2. 子pom.xml中没有指定groupId和version,因为已经隐式地从父pom.xml中继承了这两个元素,使配置更加简洁。当然,如果子模块要使用不同的groupId和version也没有问题,直接在子模块中声明即可。
3. artifactId和name的值必须在子模块中明确指定,而且不能与父模块的相同!(毕竟,哪有父子两人的名字是一模一样的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值