zoukankan      html  css  js  c++  java
  • 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工程的安装、清理工作。

  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/64Byte/p/13055287.html
Copyright © 2011-2022 走看看