欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

maven聚合与继承

程序员文章站 2022-05-04 12:30:01
...

前言

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

聚合和继承

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

maven聚合与继承

目前所有的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,这么做主要就是为了方便,融合使用,也没啥问题.