1. 聚合模块

    我们希望一次构建两个或更多项目,而不是到每个模块的目录下分别执行mvn命令,Maven 聚合这一特性就是为该需求服务的, 为了使用聚合,我们必须创建一个聚合模块,通过该模块与其他项目聚合,并且该模块可以为其他模块的父目录,也可以是平级目录,首先目录结构如下:

  • account-aggregator(聚合模块目录)
    • pom.xml
    • account-email(email模块)
      • src
      • pom.xml
    • account-service(service模块)
      • src
      • pom.xml

account-aggregator 模块的 POM 文件配置如下:

<?xml
version="1.0"
encoding="UTF-8"?>

<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>org.drsoft.account</groupId>

    <artifactId>account-aggregator</artifactId>

    <version>1.0-SNAPSHOT</version>

    <!-- 聚合和父POM模块必须为 pom -->

    <packaging>pom</packaging>

    
 

    <!-- 配置需要聚合的模块的相对目录 -->

    <modules>

        <module>account-email</module>

        <module>account-service</module>

    </modules>

</project>

 
 

此时,在account-aggregator目录下执行 Maven 命令,就会同时构建在 modules 中的模块,示例命令:

mvn clean

命令结果:

  1. 继承模块

    面向对象设计中,程序员可以建立一种类的父子结构,然后在父类中声明一些字段和方法供子类继承,这样就可以做到一处声明多处使用,类似的,我们也可以创建POM的父子结构,在父POM中声明一些配置供子POM继承,我们继续以聚合中的模块来说明,其account-aggregator模块POM不变,我们看子POM的account-service配置示例:

    <?xml
    version="1.0"?>

    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0"

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <modelVersion>4.0.0</modelVersion>

        <!-- groupId 和 version 一致,因此从父 POM 继承 -->

        <artifactId>account-service</artifactId>

        <name>account-service</name>

        <url>http://maven.apache.org</url>

        <!-- 父POM配置 -->

        <parent>

            <!-- 父POM的项目组 -->

            <groupId>org.drsoft.account</groupId>

            <!-- 父POM的项目唯一标识 -->

            <artifactId>account-aggregator</artifactId>

            <!-- 父POM的版本 -->

            <version>1.0-SNAPSHOT</version>

            <!-- 父POM的文件相对路径,默认值:../pom.xml

    (可选,如果设置了将首先根据该属性找父POM,找不到则从本地仓库查找)

    -->

            <relativePath>../pom.xml</relativePath>

        </parent>

    </project>

  • 可继承的POM元素
    • groupId:项目组ID,项目坐标的核心元素
    • version:项目版本,项目坐标的核心元素
    • description:项目的描述信息
    • organization:项目的组织信息
    • inceptionYear:项目的创始年份
    • url:项目的URL地址
    • developers:项目的开发者信息
    • contributors:项目的贡献者信息
    • distributionManagement:项目的部署配置
    • issueManagement:项目的缺陷跟踪系统信息
    • ciManagement:项目的持续集成系统信息
    • scm:项目的版本控制系统信息
    • mailingLists:项目的邮件列表信息
    • properties:自定义的Maven属性
    • dependencies:项目的依赖配置
    • dependencyManagement:项目的依赖管理配置
    • repositories:项目的仓库配置
    • build:包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等。
    • reporting:包括项目的报告输出目录配置、报告插件配置等
  • 依赖管理

    我们可以看到 dependencies元素是可以被继承的,因此在父POM中声明的依赖都会被继承到子POM中,但还存在一个问题,我们无法确认将来添加的子模块一定需要目前所有的依赖项,可能只是简单的 util 工具模块,Maven 还提供了 dependencyManagement 元素既能让子元素模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性,在 dependencyManagement 元素下的依赖声明不会不会引入实际的依赖,不过他能约束dependencies下的依赖使用,配置示例如下:

    • account-aggregator 模块的 POM 文件配置如下:

      <?xml
      version="1.0"
      encoding="UTF-8"?>

      <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>org.drsoft.account</groupId>

          <artifactId>account-aggregator</artifactId>

          <version>1.0-SNAPSHOT</version>

          <packaging>pom</packaging>

          <name>account-aggregator</name>

          <url>http://maven.apache.org</url>

          <!-- 聚合模块 -->

          <modules>

              <module>account-email</module>

              <module>account-service</module>

          </modules>

          <!-- 实际依赖 -->

          <dependencies>

              <dependency>

                  <groupId>junit</groupId>

                  <artifactId>junit</artifactId>

                  <version>3.8.1</version>

                  <scope>test</scope>

              </dependency>

          </dependencies>

          <!-- 声明依赖,但不会实际依赖 -->

          <dependencyManagement>

              <dependencies>

                  <dependency>

                      <groupId>org.springframework</groupId>

                      <artifactId>spring-context</artifactId>

                      <version>4.3.6.RELEASE</version>

                  </dependency>

              </dependencies>

          </dependencyManagement>

      </project>

      查询 account-aggregate 依赖,命令如下:

      mvn dependency:tree

      命令结果:

      根据依赖显示结果,发现其依赖关系中只有 junit,没有 org.springframework

    • account-service子POM的配置示例:

      <?xml
      version="1.0"?>

      <project

          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"

          xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

          <modelVersion>4.0.0</modelVersion>

          <artifactId>account-email</artifactId>

          <name>account-email</name>

          <url>http://maven.apache.org</url>

          <!-- 父POM配置 -->

          <parent>

              <!-- 父POM的项目组 -->

              <groupId>org.drsoft.account</groupId>

              <!-- 父POM的项目唯一标识 -->

              <artifactId>account-aggregator</artifactId>

              <!-- 父POM的版本 -->

              <version>1.0-SNAPSHOT</version>

              <!-- 父POM的文件相对路径 -->

              <relativePath>../pom.xml</relativePath>

          </parent>

          <!-- 依赖配置,依赖信息从父POM 的 dependencyManagement 内的依赖,

               因此只需要 groupId 和 artifactId -->

          <dependencies>

              <dependency>

                  <groupId>org.springframework</groupId>

                  <artifactId>spring-context</artifactId>

              </dependency>

          </dependencies>

      </project>

      查询account-email的依赖,命令如下:

      mvn dependency:tree

      命令结果:

      可以看到继承到了父POM的 junit依赖,和设置的 org.springframework 依赖

  1. 插件管理

    Maven
    提供了
    pluginManagement
    元素帮助管理插件,该元素中配置的依赖不会造成实际的插件调用行为,但POM中配置了真正的plugins元素,并且其groupId和artifactId与pluginManagement中配置的插件匹配时,才会影响实际的插件行为。

  • account-aggregate
    的POM配置:

    <?xml
    version="1.0"
    encoding="UTF-8"?>

    <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>org.drsoft.account</groupId>

        <artifactId>account-aggregator</artifactId>

        <version>1.0-SNAPSHOT</version>

        <packaging>pom</packaging>

        <name>account-aggregator</name>

        <url>http://maven.apache.org</url>

        <!-- 聚合模块 -->

        <modules>

            <module>account-email</module>

            <module>account-service</module>

        </modules>

        <build>

            <!-- 插件管理-->

            <pluginManagement>

                <plugins>

                    <plugin>

                        <groupId>org.apache.maven.plugins</groupId>

                        <artifactId>maven-source-plugin</artifactId>

                        <version>3.0.1</version>

                        <executions>

                            <execution>

                                <phase>verify</phase>

                                <goals>

                                    <goal>jar-no-fork</goal>

                                </goals>

                            </execution>

                        </executions>

                    </plugin>

                </plugins>

            </pluginManagement>

        </build>

    </project>

  • account-service子POM配置:

    <?xml
    version="1.0"?>

    <project

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"

        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <modelVersion>4.0.0</modelVersion>

        <artifactId>account-service</artifactId>

        <name>account-service</name>

        <url>http://maven.apache.org</url>

        <!-- 父POM配置 -->

        <parent>

            <!-- 父POM的项目组 -->

            <groupId>org.drsoft.account</groupId>

            <!-- 父POM的项目唯一标识 -->

            <artifactId>account-aggregator</artifactId>

            <!-- 父POM的版本 -->

            <version>1.0-SNAPSHOT</version>

            <!-- 父POM的文件相对路径 -->

            <relativePath>../pom.xml</relativePath>

        </parent>

        <build>

            <!-- 子POM定义使用插件,只需要 groupId 和 artifactId

                 其他由父POM的 pluginManagement 一定 -->

            <plugins>

                <plugin>

                    <groupId>org.apache.maven.plugins</groupId>

                    <artifactId>maven-source-plugin</artifactId>

                </plugin>

            </plugins>

        </build>

    </project>

 
 

笔记:Maven 聚合和继承的更多相关文章

  1. maven聚合与继承笔记

    maven聚合 聚合的目的是为了快速构建项目,当我们有几个maven模块,想要一次性构建,而不是到每个模块下面去执行maven命令,这时候就需要使用maven聚合(或者称为多模块). 使用聚合的时候, ...

  2. 06 Maven 聚合和继承

    Maven 聚合和继承 1. 聚合 2. 继承 <parent> <groupId>org.apache.karaf.demos</groupId> <art ...

  3. 《Maven实战》笔记-5-pom聚合和继承

    一.聚合 假设有两个模块:account-email和account-persist: 能够使用一条命令就能构建上述两个模块,需要创建一个额外的模块:account-aggregator: 通过acc ...

  4. maven学习笔记四(聚合和继承)

    聚合 现在假如,我创建了3个maven项目, user-core.2.user-log,3.user-service 这个时候,假如我们要打包这些项目,要一个一个来,会很麻烦.那么我们有没有更好的办法 ...

  5. (十四)Maven聚合与继承

    1.Maven聚合 我们在平时的开发中,项目往往会被划分为好几个模块,比如common公共模块.system系统模块.log日志模块.reports统计模块.monitor监控模块等等.这时我们肯定会 ...

  6. Maven——聚合与继承

    原文:http://www.cnblogs.com/xdp-gacl/p/4058008.html 一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 ...

  7. Maven聚合和继承的详细解释

    说到聚合与继承我们都非常熟悉,maven相同也具备这种设计原则.以下我们来看一下Maven的pom怎样进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高. ...

  8. maven课程 项目管理利器-maven 3-10 maven聚合和继承 4星

    本节主要讲了以下内容: 1 maven聚合 2 maven继承 1 maven聚合 <!-- 聚合特有标签 --> <groupId>com.hongxing</grou ...

  9. maven学习(十二)——maven聚合与继承实战

    聚合与继承实战 创建四个Maven项目,如下图所示:

随机推荐

  1. 【其他】3dmax撤销Ctrl+z不能用的解决办法

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/3dmax_ctrlz.html 如果你经常去网上下载各种模型参考学习的话,出现这个问题的概率会非常高.因为出现这个 ...

  2. 【前端】nodejs的ORM框架sequelize的工厂化

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/sequelize_factory.html 一.什么是sequelize nodejs的后台在操作数据库的时候,需 ...

  3. spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

    在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...

  4. calendar中set方法和静态属性带来的坑

    坑在哪里: 在我之前接触的一个项目中涉及到这么一项功能:每天00:00:00把某些数据移动到mongodb数据库的另一个集合中,也就是关系型数据库的表中.这个集合名是一个固定的名称加上当前的两个月前的 ...

  5. 芝麻HTTP:Python爬虫入门之Urllib库的基本使用

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS ...

  6. Django学习-25-图片验证码实例

    处理流程 用户请求网页 --> 后台发送登录界面的静态页面 --> 后台在内存中生成验证码 --> 验证码保存在用户对应的Session中 --> 返回验证码图片到前端 用户登 ...

  7. 二叉树与AVL树

    二叉树 什么是二叉树? 父节点至多只有两个子树的树形结构成为二叉树.如下图所示,图1不是二叉树,图2是一棵二叉树. 图1 普通的树                                    ...

  8. Drying POJ - 3104

    It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She ...

  9. CentOS7安装dnf报错:No package dnf available

    1.百度中提供的安装办法 yum install epel-release -y yum install dnf 2. No package dnf available解决办法 运行一下几个命令: w ...

  10. TestLink和RedMine的集成

    1.              TestLink的安装 1.1. TestLink简介 TestLink是一个php语言开发的开源免费的测试管理工具,包括产品测试需求,测试计划,测试用例的创建和执行, ...