我们来回顾一下,我们在开发项目时,一个大的项目往往会拆分成多个工程,比如,电商网站,可能会分成base、core等模块,每个模块都是一个工程,然后不同的业务,比如product、order等业务模块,也会单独成一个工程,那么工程与工程之间就必然有关联,比如,order模块依赖core模块。以往我们没有使用maven时,我么往往会借助工具,比如eclipse中可以build path中添加project关联
但是在执行单元测试、打包之类的操作时,我们还是得针对每个工程操作。工程比较少的时候,我们还可以手工操作,但是工程一旦多起来,将会显得很繁琐。
maven天然就是支持多模块的。maven通过聚合的方式,将项目的各个模块聚合在一起,当我们针对聚工程块执行构建时,聚合工程包含的模块也会执行相应的构建动作。
聚合
使用聚合,我们一般会单独建立一个maven工程。这个工程没有任何业务,仅仅是用于聚合作用,因此,它仅需在工程根目录下有一个pom.xml文件就可以了。pom的内容如下:
聚合工程的pom内容与普通工程的pom文件没有太大差异,除了packaging为pom例外。另外,我们需要通过modules及其子元素module指定聚合的子模块。这样,我们在针对聚合模块执行构建过程时,其包含的子模块也会依次执行相应的构建动作,不需要单独针对每个模块执行构建动作。
继承
思考这样一个问题,我们有一个项目,它分成了多个模块,core、base、web、product、order等,可能我们的core模块用到了spring的依赖,我们的web、order也用到了spring的依赖,这样,我们需要在core、web、order各自工程的pom文件中加入spring的依赖配置。如果使用的第三方依赖不多,这样做倒还可以接受,但是我们往往会依赖很多第三方jar,这样就会形成很多重复配置。
maven通过继承的方式,消除pom的重复配置。这有点类似java中的继承。公共的操作放在父类中,子类继承后就自动拥有相应的功能。
要配置继承,我们也需要定义一个单独的父工程,让子工程继承。为了减少工程,我们可以把父工程和聚合工程合并。我们把需要的依赖都通过dependency元素,配置在聚合工程中,然后在子工程中指定父工程为聚合工程:
子工程中通过parent元素,指定父工程的GAV及相对位置,这样,配置在父工程中的依赖,子工程中无需在配置依赖了。
以下是maven中的可被继承的pom元素:
- groupId:项目组id
- version:项目版本
- description:项目描述
- organization:项目的组织信息
- inceptionYear:项目创始年份
- url:项目URL地址
- developers:开发者信息
- contributors:贡献者信息
- distributionManagement:部署配置
- issueManagement:缺陷跟踪系统信息
- ciManagement:持续集成系统信息
- scm:版本控制系统信息
- mailingLists:邮件列表信息
- properties:自定义maven属性
- dependencies:依赖配置
- dependencyManagement:依赖配置管理
- repositories:仓库配置
- build:包括项目的源码目录配置、输出目录配置、插件配置等
- reporting:项目的报告输出目录配置、报告插件配置等
依赖管理
我们再来思考这样一个问题,通过继承的方式,的确是减少了重复依赖的配置,所以,我们把所有的依赖配置都配置在父模块中,子模块继承之后,就不需要再配置任何依赖了。这样的话,往往会引入一些不需要的依赖。比如,core模块中使用了hibernate的jar,我们把这个依赖配置到父模块中,core继承了父模块,那么core中自动引入了hibernate的jar,我们的web也继承了父模块,web模块也会自动引入hibernate的jar,而web是不需要hibernate的jar的。对于这种情况,maven使用dependencyManagement元素来管理依赖。dependencyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。
我们在父模块的dependencies元素之外,使用dependencyManagement元素包裹,这样,父模块中的这些依赖配置仅仅是一个定义,不会真正引入相应的依赖。子模块在继承父模块之后,也不会直接引入相应的依赖,需要在子模块中显示配置依赖,因为这时候依赖已经在父模块中定义了,所以子模块中的依赖仅需配置groupId和artifactId即可,无需配置version。
除了dependencyManagement元素用于依赖的管理之外,还有pluginManagement元素用于管理插件依赖。
属性定义
考虑这样一种情况,很多项目会使用spring,但是spring的模块有很多,我们一般会统一使用同一个版本的模块,比如3.2.5-RELEASE,那么我们在配置依赖时,每个依赖都指定version为3.2.5-RELEASE。但是有一天,我们不得不升级spring的版本时,我们就需要修改每个依赖的version,将其改为新的版本。同意版本的依赖比较少的时候,我们可以这么做,但是一旦数量多了,手工操作就麻烦了,甚至有时候忘了将某个依赖的版本修改,导致版本不一致。对于这种情况,我们可以使用属性替换的方式。
在pom中,通过properties元素下定义依赖的版本,在dependency中使用$操作引用定义的版本,以后修改版本,只需修改properties中定义的版本即可。
相关推荐
**Maven的核心概念与功能:** 1. **项目对象模型(POM)**:POM是Maven的核心,它是一个XML文件,包含了项目的基本信息、构建配置、依赖关系等。通过POM,Maven能够理解如何构建和管理项目。 2. **依赖管理**:...
1. **项目对象模型(POM)**:POM是Maven的核心概念,它是XML格式的配置文件,包含了项目的基本信息、依赖、构建指令等。开发者通过POM可以定义项目属性,如版本号、依赖库、构建目标等,实现项目的自动化构建。 2....
Maven核心概念** - **POM**: Maven的中心概念,是一个XML文件,包含了项目的基本信息,如项目坐标(groupId, artifactId, version)、依赖、插件等。 - **依赖管理**: Maven通过POM文件管理项目所依赖的库,依赖...
** Maven 的核心概念 ** 1. **项目对象模型 (POM)**:POM是Maven的核心,它是XML格式的文件,包含了项目的配置信息,如项目依赖、构建目标、构建过程等。POM还可以继承和聚合,实现多模块项目的管理。 2. **依赖...
- **聚合与继承**:Maven支持项目间的聚合和继承,可以方便地管理多模块项目。 #### 四、Maven高级特性 - **私服搭建**:通过Nexus等工具搭建私有仓库,可以有效地管理公司的内部依赖。 - **持续集成**:结合...
在"maven132131"这个主题下,我们可以深入探讨Maven的核心概念、工作原理以及如何在实际开发中有效地利用它。 1. Maven的核心概念 - **POM(Project Object Model)**:POM是Maven项目的基础,它是XML格式的配置...
6. **聚合与继承**:通过POM的聚合和继承特性,可以轻松管理具有共同依赖和构建设置的多个项目,提高代码复用性和一致性。 7. **版本管理**:Maven 使用传递性依赖管理,确保项目引用的每个库都是最新且兼容的版本...
Maven 的核心理念是通过一个标准的目录结构和一个统一的构建生命周期来管理项目,使得开发者可以专注于编写代码,而不是配置构建过程。 1. Maven 的基本概念: - **POM(Project Object Model)**:POM 是 Maven ...
7. **聚合与继承(Aggregation & Inheritance)**:Maven支持多模块项目的管理,可以使用聚合项目(aggregator)来管理多个子项目。继承则允许子项目共享父项目的配置,减少重复代码。 8. ** Profiles(配置文件)*...
聚合和继承是Maven中的两个重要概念,它们之间有着密切的关系: - **聚合**:用于组织多个子项目,实现集中管理和构建。 - **继承**:用于共享配置信息,减少重复配置。 #### 六、私服 Maven私服是一种内部使用的...
1. Maven 的核心概念: - **项目对象模型(Project Object Model, POM)**:是 Maven 构建的核心,是一个 XML 文件,包含了项目的基本信息、依赖、构建目标、插件配置等。 - **坐标(Coordinates)**:包括groupId...
#### Maven核心概念详解 1. **POM (Project Object Model)** - POM是Maven的核心配置文件,采用XML格式,包含了项目的所有元数据,如依赖、构建逻辑等。 - 通过POM文件,Maven可以自动化执行项目的构建过程,...
本节我们将深入探讨Maven的核心概念、配置以及它如何帮助开发者进行高效的项目管理。 一、Maven简介 Maven是由Apache软件基金会开发的一个项目管理和综合工具,它的主要功能是管理和构建Java项目。通过使用一种标准...
1. **项目对象模型 (POM)**: Maven 的核心概念是POM,这是一个XML文件,包含了项目的基本信息,如项目名称、版本、描述、开发者信息、依赖关系、构建目标等。POM使得多个项目间的共性配置可以被重用,提高了代码的可...
Maven的聚合和继承特性使得项目管理更加高效。聚合允许将多个项目作为一个整体处理,继承则允许子项目共享父项目的配置。`mvn-examples-1.0`可能会包含这些概念的实际应用。 通过深入研究`mvn-examples-1.0`中的每...