• Maven的继承与聚合


    maven的继承

      继承和聚合有相似的地方,继承的特性是指建立一个父模块,我们项目中的多个模块都做为该模块的子模块,将各个子模块相同的依赖和插件配置提取出来,从而简化配置文件,父模块的打包方式必须为pom,否则无法构建项目。父模块和聚合模块经常可以做到合二为一。

    如何配置继承:

    • 1.说到继承肯定是一个父子结构,我们先创建一个父工程
    • 2.<packaging>: 作为父模块的POM,其打包类型也必须为POM
    • 3.结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
    • 4.新的元素:<parent> , 它是被用在子模块中的
    • 5.<parent>元素的属性:<relativePath>: 表示父模块POM的相对路径,在构建的时候,Maven会先根据relativePath检查父POM,如果找不到,再从本地仓库查找
    • 6.relativePath的默认值: ../pom.xml
    • 7.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素.

    可被继承的POM元素:

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

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

    description: 项目的描述信息

    organization: 项目的组织信息

    inceptionYear: 项目的创始年份

    url: 项目的URL地址

    developers: 项目开发者信息

    contributors: 项目的贡献者信息

    distributionManagement: 项目的部署配置

    issueManagement: 项目的缺陷跟踪系统信息

    ciManagement: 项目的持续集成系统信息

    scm: 项目的版本控制系统信息

    mailingLists: 项目的邮件列表信息

    properties: 自定义的maven属性

    dependencies: 项目的依赖配置

    dependencyManagement: 项目的依赖管理配置

    repositories: 项目的仓库配置

    build: 包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等

    reporting: 包括项目的报告输出目录配置、报告插件配置等

    dependencyManagement属性

      我们知道dependencies是可以被继承的,这个时候我们就想到让我们的发生了共用的依赖元素转移到parent中,这样我们又进一步的优化了配置。

    可是问题也随之而来,如果有一天我创建了一个新的模块,但是这个模块不需要这些parent的依赖,这时候如何处理?

      dependencyManagement也是可以被继承的,这恰恰满足了我们的需要,

    它既能够让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性

      特性:在dependencyManagement中配置的元素既不会给parent引入依赖,也不会给它的子模块引入依赖,仅仅是它的配置是可继承的.

    创建一个父级项目:

     父级项目的pom.xml

    <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.zl</groupId>
        <artifactId>book-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <!-- 项目的设置 -->
        <properties>
            <!-- 编码的处理 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <!-- 定义版本 -->
            <mybatis.version>3.4.5</mybatis.version>
            <oracle.version>10.2.0.5.0</oracle.version>
        </properties>
    
        <!-- 子项目继承依赖的配置,子项目根据实际需求,添加需要的依赖 -->
        <dependencyManagement>
            <!-- 添加mybatis的依赖 -->
            <dependencies>
                <dependency>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                    <version>${mybatis.version}</version>
                </dependency>
                <!-- 添加oracle的依赖 -->
                <dependency>
                    <groupId>com.oracle</groupId>
                    <artifactId>ojdbc14</artifactId>
                    <version>${oracle.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
        
        <!-- 更改jdk版本: 使用插件 -->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
            <!-- pluginManagement按需加载 -->
            <pluginManagement>
                <plugins>
                    <!--添加Tomcat插件 -->
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <configuration>
                            <port>8888</port>
                            <path>/</path>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </project>

    创建一个子类继承父类

    子级继承父级项目的pom.xml

    <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>
        <!-- 继承的项目 -->
        <parent>
            <groupId>com.zl</groupId>
            <artifactId>test-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 默认的值为../pom.xml :表示父类的pom.xml的路径 如果relativePath找不到父项目的pom.xml,从本地仓库找 
                如果本地仓库,找不到,报错 开发阶段,推荐些写relativePath -->
            <relativePath>../user-parent/pom.xml</relativePath>
        </parent>
        <!-- 基础父类,地址不变,只需要填写名字 -->
        <artifactId>test-common</artifactId>
    
        <!-- entity没有需要导入的jar包不需要引入 -->
    </project>

    在本层中添加需要的依赖

    <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>
        <parent>
            <groupId>com.zl</groupId>
            <artifactId>book-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <artifactId>test-mapper</artifactId>
    
        <!-- 添加本层需要的依赖 -->
        <dependencies>
            <!-- 添加上一层maven项目的依赖的代码
        由于继承关系,上一层继承了父类,故本类也继承了test-parent父类 -->
            <dependency>
                <groupId>com.zl</groupId>
                <artifactId>book-common</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        <!-- 因为父类中定义了版本号,不需要定义-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
            </dependency>
        </dependencies>
    </project>

    maven的聚合

      我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。所谓聚合,顾名思义,就是把多个模块或项目聚合到一起。

       简单的说:我们在一个项目中会存在模块A和模块B,在各自的项目目录下,我们可以分别通过命令 mvn clean package 来构建各个模块,

    但是如果我们想将这两个模块一起构建呢?

           答案是我们需要建立一个模块C做为一个聚合模块。

    建立一个聚合项目,满足如下几点要求:

    • 1.该aggregator本身也做为一个Maven项目,它必须有自己的POM
    • 2.它的打包方式必须为: pom
    • 3.引入了新的元素:modules---module
    • 4.版本:聚合模块的版本和被聚合模块版本一致
    • 5.relative path:每个module的值都是一个当前POM的相对目录
    • 6.目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和<module>模块所处的目录 </module>相一致。
    • 7.习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层,其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM
    • 8.聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
    • 9.聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。

    注:在现有的实际项目中一个 POM既是聚合POM,又是父 POM,这么做主要是为了方便

    使用聚合的好处

      将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行clean操作。而使用了聚合之后就可以批量进行Maven工程的安装、清理工作。

  • 相关阅读:
    sell -- js, 字符串去重,找到字符串中出现最多次数的字符,且输出多少次
    网络连接不了!
    sell -- js过滤敏感词
    动态绑定HTML
    web前端学习之HTML CSS/javascript之一
    web前端性能优化
    浅谈大型web系统架构
    应用越来越广泛的css伪类
    css3火焰文字样式代码
    7种html5css3网页图片展示特效代码
  • 原文地址:https://www.cnblogs.com/64Byte/p/13055287.html
Copyright © 2020-2023  润新知