`
bit1129
  • 浏览: 1068090 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Maven学习笔记五]Maven聚合和继承特性

 
阅读更多

Maven聚合

 

在实际的项目中,一个项目通常会划分为多个模块,为了说明问题,以用户登陆这个小web应用为例。通常一个web应用分为三个模块:

1. 模型和数据持久化层user-core,

2. 业务逻辑层user-service以

3. web展现层user-web,

user-service依赖于user-core

user-web依赖于user-core和user-service

这三个模块都是Maven项目(在Intellij Idea中称为Module),都有各自的pom.xml,如果我们单独管理这些模块,单独的编译、运行单元测试和打包,不仅很繁琐,而且不符合项目管理的理念,为了应对这种情况,Maven提供了maven模块聚合的功能

 

如何Maven聚合

 

1.Intellij Idea对Maven的支持

 

Intellij Idea中,Maven聚合是默认的,建立一个Maven项目(概念上类似于Eclipse的Workspace),取名叫user-project,那么这个项目包含一个pom.xml,这个项目就是用于Maven聚合。有了user-project这个Maven项目,可以为Maven项目添加Maven模块,这在Idea里可以在Project视图的项目名上点击右键,选择新建一个Maven模块,这里创建3个模块,user-core,user-service,user-web,每个模块有自己的pom文件。打开user-project的pom.xml文件,它的内容是

 

 

<?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>LearnMaven</groupId>
    <artifactId>LearnMaven-user</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>user-core</module>
        <module>user-service</module>
        <module>user-web</module>
    </modules>
</project>
 这里确定几个问题:

 

 

  • project的packaging,它有三个取值

        1)jar,表示maven模块打包成jar包,这是默认值

        2)war,表示maven模块打包成war包,

        3)pom,表示maven模块不提供具体的输出,只用来做pom项目管理,这就以为它是一个聚合用的Maven项目

 

  • project的modules,module用于指定要聚合哪些moven模块,这里有三个,user-core,user-service,user-web
  • module的值user-core,user-service,user-web,这些值从何而来,聚合项目如何知道去哪里找这些模块这个是根据目录来控制的,Maven聚合项目的pom.xml必定和user-core,user-service,user-web三个目录同级,

 

 

2.Eclipse的Maven支持

 

Eclipse的m2eclipse插件对Maven的支持远不如Intellij Idea对Maven的支持,这也是Intellij Idea流行起来的主要原因之一,在Eclipse中,只能建立四个平级的Maven项目

user-project

user-core

user-service

user-web

因为user-project的pom.xml跟user-core,user-service,user-web不在同一个目录下了,因此在user-project的pom.xml指定聚合模块的就需要指定上级目录

 

<?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>LearnMaven</groupId>
    <artifactId>LearnMaven-user</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>../user-core</module>
        <module>../user-service</module>
        <module>../user-web</module>
    </modules>
</project>

 

 

Maven继承

Maven聚合的目的是让Maven的聚合模块统一管理项目的各个maven模块,同样,这些被管理的maven模块可以继承这个聚合模块或者另外一个packaging为pom的maven模块(比如单独定义一个子模块,定义为user-parent), 这么做的好处是

1.在user-parent中定义项目的公共属性,这些属性在各个子模块中公用

2.项目各个模块依赖的依赖的版本,各个模块是一样的,就可以将它们集中到一起集中管理

3.使用<dependencyManagement><dependencies></dependencies></dependencyManagement>集中管理依赖,在子模块中的pom.xml中的依赖声明中只声明groupId和artifactId

 

maven模块声明继承另外一个maven模块

子模块的parent元素

<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">
    <parent>
        <artifactId>user-artifact</artifactId>
        <groupId>user-project</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-core</artifactId>
    <dependencies>
        <dependency>
  	  <groupId>org.slf4j</groupId>
	  <artifactId>slf4j-api</artifactId>
	  <version>1.7.7</version>
        </dependency>
    </dependencies>

</project>

 上面定义了,user-core这个模块继承自user-project这个聚合模块。同时,user-core依赖于slf4j,我们看到它的依赖包含了groupId,artifactId,version,如何省略version呢?

 

 聚合模块(同时也是父模块)的pom.xml

 

<?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>user.project</groupId>
    <artifactId>user.artifact</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>user.core</module>
        <module>user.service</module>     
        <module>user-web</module>
    </modules>
    <properties>
        <!--version constants for the dependents->
        <slf4j.version>1.7.7</slf4j.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
               <!--The value is defined as property-->
                <version>${slf4j.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

 

user-core模块的pom.xml定义

<?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">
    <parent>
        <artifactId>learn</artifactId>
        <groupId>LearnProject</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>user-core</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <!--No version is specified here,it inherits from its parent-->
        </dependency>
    </dependencies>


</project>

  

总结

1. 聚合和继承的关系

聚合模块(user-project)和继承模块(user-parent)可以是一个模块,也可以是两个独立的模块:

Intellij Idea中同一个模块的项目结构

user-project(user-parent)

     user-core

     user-service

     user-web

Intellij Idea中两个模块的项目结构,Intellij Idea自动将user-parent聚合到user-project中,这其实是没有必要的

 user-project

     user-parent

     user-core

     user-service

     user-web

 

Eclise中同一个模块的项目结构

user-project(user-parent)

user-core

user-service

user-web

 

Eclise中独立两个模块的项目结构

user-project

user-parent

user-core

user-service

user-web

 

user-project不必聚合user-parent,user-parent也不必继承自user-project,但是user-project聚合了user-core,user-service,user-web;user-core,user-service,user-web继承自user-parent。

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    maven学习笔记01(基础入门)

    ** Maven基础入门 ** Maven是一个Java项目管理工具,它主要负责构建、依赖管理和项目信息管理。...在`maven_study_01`的学习笔记中,你可以找到更多关于Maven的基础知识和实践案例,帮助你快速上手并掌握这一工具。

    maven学习笔记

    **Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程...这份"Maven学习笔记"将是你探索Maven世界的宝贵资源,涵盖了从基本概念到高级特性的全方位知识。

    尚硅谷Maven课程笔记代码资源

    五、Maven的继承与聚合 Maven支持项目间的继承和聚合。继承允许子项目共享父项目的配置,减少了重复代码。聚合则可以将多个项目组织成一个整体,方便一起构建和部署。 六、Maven profiles profiles是Maven中的环境...

    maven学习笔记.rar

    ** Maven学习笔记详解 ** Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM)来管理项目的依赖关系,构建过程以及配置信息。Maven...

    培训机构传出的maven学习笔记

    在“培训机构传出的maven学习笔记”中,我们可能涵盖以下几个关键知识点: 1. **Maven的基本概念**:理解Maven的核心概念,如POM.xml文件、仓库(本地仓库和中央仓库)、生命周期和构建阶段(如clean、compile、...

    Maven学习笔记

    聚合和继承是Maven中用于管理和维护大型项目的两个重要概念。聚合允许将多个模块的构建信息聚合到一个总的POM文件中,这样就可以一次性构建多个模块。继承则是为了保持项目结构的统一性,允许父POM文件定义一些公共...

    maven项目学习笔记记录

    **Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...

    Maven 学习笔记.docx

    【Maven学习笔记】 Maven是一个强大的项目管理和构建工具,主要应用于Java开发领域。它能够自动管理项目的依赖关系,帮助开发者解决因jar包版本冲突、依赖管理混乱等问题带来的困扰。Maven通过制定一套规范化的项目...

    Maven高级-黑马程序员学习笔记

    本文将深入探讨Maven的高级特性,包括多模块开发、继承与聚合,以及私有仓库(私服)的操作,这些都是在大型项目中不可或缺的知识点。 ### 一、多模块开发 在大型项目中,往往需要将代码分解为多个模块进行管理,...

    maven学习资源整理

    书中详细解释了Maven的生命周期、插件、仓库管理以及高级特性,如聚合项目、多模块项目和自定义构建流程。通过深入阅读这本书,你可以掌握更复杂的Maven使用技巧,提升项目管理水平。 **Better_Builds_With_Maven...

    Maven学习笔记大全.docx

    **Maven学习笔记大全** Maven是一个强大的Java项目管理工具,它通过项目对象模型(Project Object Model,简称POM)来管理和构建项目。POM是一个XML文件,包含了项目的配置信息,如依赖、构建过程和插件设置。Maven...

    maven-聚合项目-springMVC

    在"maven学习笔记"中,我们可以深入学习如何配置POM.xml文件,理解Maven的生命周期和构建过程。 **Spring MVC**是Spring框架的一个模块,专门用于处理Web应用的请求-响应模型。它采用模型-视图-控制器(MVC)设计...

    Maven3实战笔记(全)

    8. **聚合与继承**:聚合允许将多个项目组合在一起,而继承则允许共享配置,减少代码重复,提高可维护性。 9. **版本管理**:Maven遵循严格的版本命名规则,如SNAPSHOT表示开发版本,RELEASE表示稳定版本。这有助于...

    Maven3实战笔记(整合)

    - **多环境配置管理**:利用Maven的profile特性,为不同环境(如开发、测试、生产)配置不同的参数,确保构建过程的灵活性和适应性。 - **构建微服务架构**:在微服务环境中,每个服务都可以作为一个独立的Maven项目...

    java_maven高级笔记

    6. **Maven聚合与继承** - **聚合项目**:一个POM可以包含多个模块,方便管理多模块项目。 - **继承关系**:子POM可以从父POM继承配置,减少重复代码。 7. **Maven的生命周期与构建过程** - **清理**:clean生命...

    Maven开发者笔记

    Maven的聚合项目(aggregation)特性可以帮助管理这些子模块,确保构建顺序正确。 7. **Maven profiles**:profiles允许根据环境条件或特定需求来改变项目的配置。它们可以用于区分开发、测试和生产环境的配置。 8...

Global site tag (gtag.js) - Google Analytics