maven聚合与继承

前言

我们的项目呢,有一个itoo-root.itoo-root第一个特殊的地方为packaging,值必须为pom,同时配上了私服的地址

聚合和继承

一张图来看清itoo的情况吧:


目前所有的java项目全都继承了itoo-root,所以itoo-root和itoo-parent是继承关系. itoo-root里面就是定义的所有的jar以及jar的版本,一处声明,多处使用.

看itoo-root使用

    <groupId>com.dmsdbj.itoo</groupId>
    <artifactId>itoo-root</artifactId>
    <version>1.0.2-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modelVersion>4.0.0</modelVersion>


    <!-- 自定义Maven属性会被继承 -->
    <properties>
        <!-- 私服器地址 -->
        <nexus.url>http://ip:8081/nexus/content/repositories</nexus.url>
        <!-- 构建项目时必须配置,用于maven中的文件拷贝 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<mysql.version>5.1.45</mysql.version>
        <!-- 数据库连接池 -->
        <mybatis.version>3.4.5</mybatis.version>
        <mybatis-generator-core.version>1.3.2</mybatis-generator-core.version>
    </properties>
    <dependencyManagement>  <!-- 用于父项目配置共同的依赖关系 -->
       	   <dependencies>
		<dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            	</dependency>
            	<dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            	</dependency>
            	<dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            	</dependency>
           </dependencies>
    </dependencyManagement>
groupId 和version 是可以被继承的.还有一些可继承:

groupId:项目组id,项目坐标的核心元素

version:版本,项目坐标的核心元素

description:项目的描述信息

organization:项目的组织信息

dependencies:项目的依赖配置

dependencyManagement:项目的依赖管理配置

等等

dependencyManagement: 元素即可让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性.所以这也就是谁用就取.不会有多余的jar存在.

 讲完itoo-root,我们来看看itoo-parent是如何来继承的

itoo-parent即继承了itoo-root,同时也是一个聚合工程

先说继承:parent元素是声明父模块,parent下的子元素groupid/artifactId和version指定了父模块的坐标.这三个元素是必须的.

relativePath:由于我们直接把itoo-root推到了私服上,所以直接去本地仓库找就好了.不需要设定了.

(relativePath 默认值是../pom.xml,父pom在上一层目录下.如果找不到,会去本地仓库找)

 子模块隐式地从父模块继承了groupId和version.如果遇到子模块需要使用和父模块不一样的groupId和version的情况,用户可以完全在子模块中显式声明.对于artifactId,子模块应该显式声明,因为如果完全继承了父模块,会造成坐标冲突,另外使用了不同的groupId和version,同样的artifactId容易造成混淆.

我们来看看itoo-parent

   <parent>
        <groupId>com.dmsdbj.itoo</groupId>
        <artifactId>itoo-root</artifactId>
        <version>1.0.2-SNAPSHOT</version>
    </parent>

    <groupId>com.dmsdbj.itoo</groupId>
    <artifactId>itoo-parent</artifactId>
    <version>1.0.3-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modelVersion>4.0.0</modelVersion> 
itoo-parent作为聚合pom

 <modules>
    	
        <module>achievement-parent</module>
        <module>authorityManagement-parent</module>
        <module>basicInfo-parent</module>
        <module>examinationEvaluation-parent</module>
        <module>itooCloud-parent</module>
        <module>shiro-jwt-authority</module>
        <module>singleTableMaintain-parent</module>
        <module>teachingManagement-parent</module>
		<module>tutor-parent</module>
    </modules>

聚合和继承的关系

对于聚合模块来说:它直到有哪些被聚合的模块,但那些被聚合的模块不知道这个聚合模块的存在,我们来看itoo-parent, 在其pom中,我们可以看到被聚合的模块,有很多个,但是这些模块之间,并不知道被聚合了.

对于继承关系的父pom来说:它不知道有哪些子模块继承于它,但那些字模块都必须直到自己的父pom是什么. 我们来看itoo-root, 它并不知道有多少个项目在继承它. 但是对于itoo-parent或者graduate-parent来讲,pom也需要配置itoo-root.所以必须得知道父pom是谁.

我们继续看上面的导图,可能你要问了,itoo-parent现在既是聚合pom,也是父pom,这么做主要就是为了方便,融合使用,也没啥问题.




评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光下是个孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值