一点一点学maven(08)——maven聚合和继承

1、maven聚合

在maven模块化开发过程中,要把一个项目的多个模块安装到本地仓库中,需要对各个模块执行install命令。也可以将其放在一起运行,这样的方式就被称为聚合。

比如将项目A、B、C执行聚合打包安装,此时创建一个D项目,将D项目的packing设置为pom,使用<modules>标签将前面三个项目聚合,然后在D项目执行install命令,A、B、C三个项目就会被同时打包安装到本地仓库中。

  <groupId>com.jsun.test</groupId>
  <artifactId>D</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

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

  <!-- 将A、B、C项目聚合 -->
  <modules>
    <module>../A</module>
    <module>../B</module>
    <module>../C</module>
  </modules>

D项目执行install命令后,控制台执行结果如下:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] C
[INFO] B
[INFO] A
[INFO] D
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building C 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
。。。。。。
[INFO] ------------------------------------------------------------------------
[INFO] Building B 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
。。。。。。
[INFO] ------------------------------------------------------------------------
[INFO] Building A 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
。。。。。。
[INFO] ------------------------------------------------------------------------
[INFO] Building D 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
。。。。。。
[INFO] Reactor Summary:
[INFO] 
[INFO] C .................................................. SUCCESS [  5.915 s]
[INFO] B .................................................. SUCCESS [  0.162 s]
[INFO] A .................................................. SUCCESS [  0.127 s]
[INFO] D .................................................. SUCCESS [  0.061 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.553 s
[INFO] Finished at: 2016-07-31T22:58:54+08:00
[INFO] Final Memory: 17M/112M

2、maven继承

上述A、B、C三个项目都是用junit,在它们各自的pom.xml中都进行了配置,此时就重现了许多的重复,给维护、管理带来很多不便。

maven提供了向java中继承的概念和功能,将公共组件提到父类中,子类通过继承使用。

例子:
新建项目P作为项目A、B、C的公共父类:

<groupId>com.jsun.test</groupId>
  <artifactId>P</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 将packing更改为pom -->
  <packaging>pom</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>3.8.1</junit.version>
  </properties>

  <!-- 使用dependencyManagement标签管理依赖,实际管理的是依赖的版本号,让
所有子项目中引用对应依赖而不用显式的列出版本号;
依赖并不会在当前项目引入 -->
  <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>  
  </dependencyManagement>

然后A(B、C)项目继承项目P:

  <!-- 使用parent标签,实现对父模块的继承 -->
  <parent>
      <groupId>com.jsun.test</groupId>
      <artifactId>P</artifactId>
      <version>0.0.1-SNAPSHOT</version>
  </parent>

  <!-- 定义子模块的坐标信息,如果子项目与父项目的groupId、version相同,则去掉groupId和version,继承使用父模块的groupId或(和)version -->
  <artifactId>A</artifactId>
  <packaging>jar</packaging>

  <dependencies>
   <dependency>
      <!-- 使用继承的父模块的版本号dependencyManagement中管理的版本号 -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
    </dependency>
  </dependencies>

补充说明:
dependencies标签管理的依赖可以被子模块共享,比如一个父模块parent引入了junit依赖,在子模块child中自动被引入,实现依赖共享,也就是说子模块一下子就把父模块所有的依赖拿到了;

dependencyManagement标签管理的依赖无法被子模块共享(确切的说应该是除了版本号的其它信息无法共享),比如一个父模块parent引入了junit依赖,在子模块child中并无法被自动引入,此时child需要手动引入junit包,但是自己不用管理版本号,也就是不再用version标签。

总结:在子模块继承父模块的关系中,dependencies实现对依赖的统一管理,主要为了让子模块共享所有依赖;dependencyManagement实现的是对版本号的统一管理,子模块并不会共享所有模块,即不会一下子拿到所有依赖。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值