Maven学习小结(四 聚合与继承)

1.聚合

一次构建多个项目模块,将多个Maven项目合并为一个大的项目。

2.继承

为了消除重复,把很多相同的配置提取出来,例如groupid和version;

3.示例

3.1创建4个Maven项目,放在相同的目录下,其中hello_parent为父项目(聚合模块),hello_1/hello_2/hello_3为子项目(被聚合的模块);hello_parent的POM既是聚合POM,又是父POM这么做主要是为了方便。

3.1.1 hello_parent项目POM

<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">
  <!-- 当前pom的版本号 -->
  <modelVersion>4.0.0</modelVersion>
  <!-- groupId: 当前jar所属的命名空间 -->
  <groupId>cn.test.maven</groupId>
  <!-- 当前项目模块名称 -->
  <artifactId>parent</artifactId>
  <!-- 当前项目的版本, SNAPSHOT镜像版 -->
  <version>0.0.1-SNAPSHOT</version>
  <!-- 聚合、父继承的packaging必须是pom -->
  <packaging>pom</packaging>

  <!-- name提供一个相对容易读的名字,合理配name字段,会让Mavne的构建输出更清晰 -->
  <name>Parent</name>
  <url>http://maven.apache.org</url>

 <!-- 定义要聚合的模块 -->
  <modules>
      <!-- 每个module的值都是当前pom的相对路径 -->
      <module>../hello_ch1</module>
      <module>../hello_ch2</module>
      <module>../hello_ch3</module>
  </modules>
  <!-- 定义属性 -->
  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <junit.version>4.9</junit.version>
      <maven.version>0.0.1-SNAPSHOT</maven.version>
  </properties>

   <!-- 用dependencyManagement进行jar包依赖管理 -->
    <dependencyManagement>
        <!-- 配置jar包依赖 -->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <!-- 访问junit.version属性 -->
                <version>${junit.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>cn.test.maven</groupId>
                <artifactId>hello_ch1</artifactId>
                <!-- 访问maven.version属性 -->
                <version>${maven.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>cn.test.maven</groupId>
                <artifactId>hello_ch2</artifactId>
                <!-- 访问maven.version属性 -->
                <version>${maven.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

3.1.2 子项目1 POM(hello_ch1)

<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>
  <artifactId>hello_ch1</artifactId>

  <!-- 继承parent项目中的pom.xml配置 -->
  <parent>
      <groupId>cn.test.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <!-- 相对路径 -->
      <relativePath>../hello_parent/pom.xml</relativePath>
  </parent>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

3.1.3 子项目2 POM(hello_ch2)

<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>
  <artifactId>hello_ch2</artifactId>
  <name>hello_ch2</name>
  <!-- 继承parent项目中的pom.xml配置 -->
  <parent>
      <groupId>cn.test.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../hello_parent/pom.xml</relativePath>
  </parent>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>    

        <dependency>
            <groupId>cn.test.maven</groupId>
            <artifactId>hello_ch1</artifactId>
        </dependency>
    </dependencies>
</project>

3.1.4 子项目3 POM(hello_ch3)

<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>
  <artifactId>Hello</artifactId>

  <parent>
      <groupId>cn.test.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <relativePath>../hello_parent/pom.xml</relativePath>
  </parent>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>    

        <dependency>
            <groupId>cn.test.maven</groupId>
            <artifactId>hello_ch2</artifactId>
        </dependency>
    </dependencies>
</project>

4.在parent项目中构建:

时间: 2024-10-25 03:30:56

Maven学习小结(四 聚合与继承)的相关文章

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

聚合 现在假如,我创建了3个maven项目, user-core.2.user-log,3.user-service 这个时候,假如我们要打包这些项目,要一个一个来,会很麻烦.那么我们有没有更好的办法通过只打包一个,来让其他都打包呢?ma 这个时候,我们就可以利用maven的聚合特性来实现.新建一个空的maven项目.如下图: 创建完毕后,打开pom.xml编写如下的配置: 这个时候,我们只需要执行这一个空的maven项目即完成了所有的项目的打包. 继承 现在假如,我创建了3个maven项目,

Maven学习总结(五)——聚合与继承

一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module> 3 <module>模块二</module> 4 <module>模块三</module> 5 </modules> 例如:对项目的Hello.HelloFriend.MakeFriends这三个模块进行聚合 1 <modules>

Maven学习总结(五)——聚合与继承【如果想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合】

一.聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1.聚合配置代码 1 <modules> 2 <module>模块一</module> 3 <module>模块二</module> 4 <module>模块三</module> 5 </modules> 例如:对项目的Hello.HelloFriend.MakeFriends这三个模块进行聚合 1 <modules>

Maven详解之聚合与继承

说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构.分模块开发,来提高代码的清晰和重用.针对于这一特性,maven也给予了相应的配置. 情景分析一: 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可

Maven详解 之 聚合与继承

说到聚合与继承我们都很熟悉,maven同样也具备这样的设计原则,下面我们来看一下Maven的pom如何进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式进行开发,于是就有了我们的分层架构.分模块开发,来提高代码的清晰和重用.针对于这一特性,maven也给予了相应的配置. 情景分析一: 我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可

Maven学习记录(四)--多模块开发配置

多模块的好处就是协同开发,对于大的项目这样分工可以提高效率,同时减轻代码耦合,看起来也一目了然,maven多模块还解决了不同人开发使用的架包版本冲突等问题 一.创建项目 1.创建父级容器 不要使用模板,直接创建,创建后就可以直接把src目录删除,这个容器是用来承载其他子项目的 2.创建子项目 直接对着父项目右键,然后创建module,选择你需要用到的模板 3.创建后IDEA生成的配置 首先是目录结构, 对应的maven结构,root代表父项目 父项目的pom.xml,IDEA很智能的把要配置的都

maven学习系列6----聚合与继承

聚合 前面也讲过聚合的作用就是把多个模块(maven工程)放在一个模块内部,这个模块就可以说成是一个聚合,单独构建聚合模块就会把聚合在一起的其他模块一起构建(也可以配置只编译其中一部分模块).聚合模块的packageing必须是POM,聚合模块与被聚合的模块之间的关系如下图. 对于聚合模块来说,它知道有哪些被聚合的模块,但是被聚合的模块不知道这个聚合模块的存在. 假设聚合模块名为hello,需要聚合的模块名为hello1和hello2两个模块.这里只简单说一下聚合的配置方法,不涉及项目代码. 1

Maven学习总结(四)——Maven核心概念

一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 version:项目的当前版本 packaging:项目的打包方式,最为常见的jar和war两种 样例: 1.3.Maven为什么使用坐标? Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范. 拥有了统一规范,就可以把查找工作交给机器. 二.依赖管理 2.1.依赖配置 依赖配置主要

Maven学习(四):生命周期与maven插件

一.maven 生命周期 (一)简介 Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解: 1.顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义. 2.这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install  这样的命令是通用的. 3.一个M