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

来源:互联网 发布:推荐充电宝 知乎 编辑:程序博客网 时间:2024/05/14 08:09

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 0
原创粉丝点击