【Maven】03 ——Maven 继承,聚合,依赖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lnazj/article/details/82709701

1.继承
在构建多个模块的时候,往往会多有模块有相同的groupId、version,或者有相同的依赖,为了减少pom文件的配置,跟我们的项目中类的继承一样,在父工程中配置了pom,子项目中的pom可以继承

继承POM的用法
面向对象设计中,程序员可以通过一种类的父子结构,在父类中声明一些字段和方法供子类继承,这样可以做到“一处声明、多处使用”,类似的我们需要创建POM的父子结构,然后在父POM中声明一些配置,供子POM继承。

子工程gropid 和version没写,是因为子工程的groupid 和version 和父工程的一样.所以子工程继承了父工程,但是当子工程的groupid ,version和父工程的不一样的时候,就需要自己重写.父模块只是为了帮助消除配置的重复,因此它本身不包含除POM之外的项目文件,也就不需要src/main/java之类的文件夹了。

<artifactId>integral-kernel-parent</artifactId>
    <packaging>pom</packaging>

    <parent>
    <groupId>com.dmsdbj.cloud</groupId>
    <artifactId>cloud-integral-parent</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    </parent>

在父pom 中定义了整个项目所需要的依赖,如tools等.

<dependencies>
        <dependency>
            <groupId>com.dmsdbj.cloud</groupId>
            <artifactId>cloud-tool</artifactId>
            <version>0.0.2-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

    </dependencies>

可继承的POM元素

groupId:项目组ID,项目坐标的核心元素
version:项目版本,项目坐标的核心元素
description:项目的描述信息
organnization:项目的组织信息
inceptionYear:项目的创始年份
url:项目的URL地址
developers:项目的开发者信息
dependencies:项目的依赖配置
dependencyManagement:项目的依赖管理配置
repositories:项目的仓库配置
build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等

依赖管理
当多有模块中有相同的依赖时,我们可以将这些依赖提取出来,同一在父POM中声明,这样就可以简化子模块的配置了,但是这样还是存在问题,当想在项目中加入一些,不需要这么多依赖的模块,如果让这个模块也依赖那些不需要的依赖,显然不合理。

Maven提供的dependentcyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活度。在dependentcyManagement元素下的依赖声明不会引入实际的依赖,而是定义了依赖的版本,对版本进行同一管理,避免出现版本不一致的情况:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
  </dependencyManagement>

dependencyManagement声明的依赖既不会给项目引入依赖,也不会给它的子模块引入依赖,不过这段配置是会被继承的。真正地引入到项目中是在子项目的pom文件中进行定义声明的.dependencyManagement声明依赖能够统一规范项目中依赖的版本,当依赖的版本在父POM中声明之后,子模块在使用依赖的时候就无效声明版本,也就不会发生多个子模块使用依赖版本不一致的情况。这可以降低依赖冲突的几率。

2.聚合
在我们的项目中有controller,service,dao层,每一个里面都有pom文件,在构建的需要把每一个都进行构建,但是有了聚合,我们创建一个额外的模块。然后通过该模块,来构建整个项目的所有模块把他们聚合到一起,能够使用一条命令就构建多个模块,聚合工程的结构如下:
这里写图片描述

pom文件如下:

    <parent>
        <artifactId>e3-parent</artifactId>
        <groupId>cn.e3mall</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../e3parent/pom.xml</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>cn-manager</artifactId>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>e3-manager-pojo</module>
        <module>e3-manager-dao</module>
        <module>e3-manager-interface</module>
        <module>e3-manager-service</module>
        <module>e3-manager-web</module>
    </modules>
    <packaging>pom</packaging>

一个特殊的地方就是packaging,其值为pom,如果没有声明的话,默认为jar,对于聚合模块来说,其打包方式必须为pom,否则无法构建。

modules里的每一个module都可以用来指定一个被聚合模块,这里每个module的值都是一个当前pom的相对位置。

3.继承与聚合的关系
继承是为了减少配置,配置是为了方便快速构建项目.
继承:在子工程的pom 文件中定义元素
聚合:它知道有哪些被聚合的模块,但那些被聚合的子模块不知道这个聚合模块的存在.
中的元素就是要被聚合的模块.
为了方便,有的工程既是聚合工程也是父工程.

猜你喜欢

转载自blog.csdn.net/lnazj/article/details/82709701