(五)Maven中的聚合和继承

一、为什么要聚合?

 

  • 定义:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。所谓聚合,顾名思义,就是把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven project ---  aggregator。
  • 注意:
    •     aggregator本身也做为一个Maven项目,它必须有自己的POM它的打包方式必须为: pom
    •      它的打包方式必须为: pom
    •     引入了新的元素:modules---module,每个module的值都是一个当前POM的相对目录
    •     聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。

 

  • 案例:

结果:

 

 

 二、继承

  • 为什么要继承?

    •   我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的元素,比如说每个模块都需要Junit,使用spring的时候,其核心jar也必须都被引入,在编译的时候,maven-compiler-plugin插件也要被引入。继承是解决包冲突的解决方法之一。

 

  •  如何配置:

    •   <packaging>: 作为父模块的POM,其打包类型也必须为POM
    •    结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
    •        新的元素:<parent> , 它是被用在子模块中的
    •    子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素

     

  • 案例:

  • maven_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.shyroke</groupId>
  <artifactId>maven_parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 <!-- 定义公用的依赖包,不负责具体的jar包引用,jar包的引用在子工程中实现 -->
 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
         </dependency>
     </dependencies>
 </dependencyManagement>
 
 
</project>
  • maven05/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.shyroke</groupId>
      <artifactId>maven_parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
</parent>

    <artifactId>maven05</artifactId>
    <!-- 如果版本号与maven_parent父工程一致的话可以省略,因为子工程会继承父工程的groupId和version -->
    <version>2.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

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


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>



    <dependencies>


     <dependency>
     <!-- 父工程中已经定义了junit的版本,所以这里就不需要定义版本了 -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    </dependencies>
</project>

结果:

 

posted @ 2017-08-09 11:24  shyroke、  阅读(228)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~