`

maven 聚合和继承

 
阅读更多

聚合

为了能够使用一条命令就能构建多个模块,需要额外创建一个模块,然后通过该模块构建整个项目所有模块,该模块暂且称之为聚合模块。聚合模块本身作为一个maven项目,必须要有自己的pom,不过作为一个聚合项目,其pom又有特殊的地方

1.<project>根节点下的<packaging>节点,一般项目不申明默认打包为jar文件,对于聚合模块来说它的值必须是pom,否则无法构建

2.modules元素,用户通过在一个打包方式为pom的maven项目中声明任意数量的module元素来实现模块的聚合。这里每个module的值都是当前pom的相对目录

为了方便定位内容,模块所处目录应当与其artifactid一致,为了方便用户构建项目,通常将聚合模块放在项目目录最顶层,其他模块作为聚合模块的子目录存在。当然这些都不是一定的。

另外聚合模块的内容一般只有一个pom文件

 

 

继承

多模块项目还要一个什么问题呢,就是配置的重复。maven的继承机制就是针对这个问题,我们可以创建pom的父子结构,然后在父pom中声明一些配置供子pom继承,这些pom也有一些特点

1.父pom的packaging也必须是pom

2.子pom使用parent元素声明父模块,parent元素中的relativePath表示父pom的位置,当项目构建时,maven先根据该元素检查父pom,如果找不到再从本地仓库找,relativePath的默认值是../pom.xml,即maven默认父pom在上一层目录下。

3.父pom的某些配置子pom继承后可以不用再写比如父pom的version等

可依赖的元素包括:groupId、version、url、distrubutionManagement、properties、dependencies、dependencyManagement、repositories、build、reporting等等

 

 

依赖管理

可继承元素包括dependencies说明依赖是可以被继承的,因此是可以将依赖配置放到父模块,子模块就能移除相应的配置。这种做法是可行的,但是存在一些问题,不一定所有子模块都要这些依赖。

maven提供的dependencyManagement既能让子模块继承依赖配置又能保证子模块使用的灵活性。在该元素下的依赖声明不会引入实际依赖,不过能够约束dependencies下的依赖使用。

比如父pom中配置

<dependencyManagement>

 <dependency>

   <groupId>junit</groupId>

   <artifactId>junit</artifactId>

   <version>2.0.4</version>

   <scope>test</scope>

 </dependency>

</dependencyManagement>

子pom可以这样配置

<dependencies>

  <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

  </dependency>

</dependencies>

这里省去了子pom中版本和作用范围的配置,这种配置方式省不了很多配置,但是能起到统一项目范围中依赖版本的作用

 

有依赖管理当然也有插件管理,pluginManagement跟dependencyManagement作用相似

 

聚合和继承的关系

maven中聚合和继承其实是两个概念,首先它们目的不同,前者主要为了快速方便构建项目,后者主要为了消除重复配置

对于聚合模块,它知道有哪些被聚合模块,但是被聚合的模块不知道聚合模块存在

父pom,不知道有哪些子模块继承它,但子模块必须知道自己的父pom是什么

 

如果非要说他们的共同特性,就是聚合模块和父模块除了pom外都没有实际内容,而pom的packaging都必须是pom,而在实际项目中,经常是一个pom既是聚合pom也是父pom

 

 

maven提倡的是“约定优于配置”(Convention Over Configuration),使用约定而不是更灵活的配置的原因主要是为了大量减少配置。比如maven默认源码目录为src/main/java/等

 

 

反应堆(Reactor)是指所有模块组成的一个构建结构,对于单模块的项目,反应堆就是模块本身,但对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系

 

 

添加:

依赖传递,举个例子

项目中依赖spring-core,点开spring-core的pom发现该构件依赖common-logging,则项目依赖common-logging。展开项目的maven-dependencies就能看到common-logging的包

分享到:
评论

相关推荐

    maven聚合和继承

    Maven聚合(Aggregation)是用来管理多个相关项目的方式,这些项目可能共享一部分代码或者有共同的构建目标。在POM中,我们可以通过设置`&lt;modules&gt;`标签来指定一个父项目下的子项目。这样,当我们在父项目执行构建...

    maven聚合与继承配置

    本示例将深入探讨"Maven聚合与继承"的概念。 **一、Maven聚合(Aggregation)** Maven聚合允许我们将多个独立的Maven项目组织在一起,形成一个单一的构建单元。在我们的示例中,`parent`项目就是一个聚合项目。它...

    maven依赖+继承+聚合

    通过理解并灵活运用Maven的依赖、继承和聚合,开发者可以更高效地管理复杂的项目结构,减少重复工作,提高开发效率。在实际项目中,合理使用这三个特性,可以使代码组织更加清晰,项目维护更加容易。在这个名为...

    maven聚合工程demo

    总结来说,"maven聚合工程demo"是一个利用 Maven 聚合和继承机制,结合 SSH 框架构建的多模块 Java Web 应用项目。通过聚合,我们可以高效地管理多个子项目,通过继承,我们保持了配置的一致性。同时,"META-INF" 和...

    Maven聚合与继承实例详解.docx

    Maven聚合(Aggregation)功能则允许我们将多个Maven项目组合成一个单一的构建单元。通过在父POM中使用`&lt;modules&gt;`标签,可以列出所有子模块,Maven在构建时会按顺序编译和打包每个子模块。这在处理大型多模块项目时...

    maven聚合项目

    总结来说,这个"Maven聚合项目"是一个集成了聚合、继承、插件管理和私服使用的实例,展示了如何高效地管理和构建多模块的Java项目。通过这种方式,开发团队可以更有效地协同工作,保证项目的稳定性和一致性。

    maven继承与聚合代码

    **二、Maven聚合** Maven的聚合功能则用于管理多个相关项目,把它们组合成一个整体。这主要通过`&lt;modules&gt;`标签来实现,它允许在一个POM中列出一系列子模块,使得我们可以一次性构建这些模块。聚合POM并不直接影响...

    通过Maven的聚合和继承特性创建多模块项目示例

    Maven,作为Java开发中的构建工具,提供了强大的聚合(Aggregation)和继承(Inheritance)特性,使得多模块项目的管理变得高效且有序。本文将深入探讨如何利用这两个特性来创建一个复杂的多模块项目,并通过提供的...

    Maven的聚合与继承DEMO(以及前后端分离)

    Maven 的聚合和继承特性可以很好地支持这种架构,通过不同的模块分别处理前端和后端的构建,保持项目结构清晰,便于团队协作。 在实践中,我们可能需要创建以下类型的 Maven 子项目: 1. 前端项目:通常使用 ...

    maven聚合实例

    总结来说,"maven聚合实例"展示了如何利用Maven的聚合特性来管理多模块项目,以及如何在子项目之间进行依赖和接口调用。这样的实践使得大型项目变得有序且易于维护,同时充分利用了Maven的强大功能。

    maven 依赖,聚合,继承,插件运行应用

    总结起来,Maven的依赖管理、聚合、继承和插件运行机制是构建和管理Java项目的重要工具。它们简化了项目的构建流程,提高了代码复用和项目协作的效率。理解并熟练掌握这些概念,对于Java开发者来说至关重要。

    maven聚合项目模板

    "maven聚合项目模板"是指使用Maven创建的一种特殊结构,用于组织多个相关但独立的子项目,使得这些子项目可以作为一个整体进行构建和管理。这种方式在大型项目或者有多个子模块的项目中非常常见。 1. **模块分组**...

    java maven 聚合项目 分模块 socket 双向通信实例demo

    在Java开发中,Maven聚合项目(Aggregator Project)是一种管理多模块项目的方式,它允许开发者在一个父项目中集合并构建多个子项目。这样的结构有助于代码的组织和依赖管理,特别是当项目涉及到多个独立但相互关联...

    Maven安装配置教程及仓库、POM坐标系、Maven工程、继承与聚合

    Maven支持通过继承和聚合来管理多个项目或模块之间的依赖关系。**继承**允许子项目继承父项目的配置,简化重复配置;而**聚合**则是将多个模块组织在一起,便于统一管理。 - **继承**:子POM文件可以继承父POM中的...

    maven总结笔记-继承和聚合

    maven总结笔记-继承和聚合

    Maven+SpringMVC+Mybatis项目搭建示例完整版

    基于Maven搭建Spring+Mybatis的项目,包含Maven聚合和继承、Mybatis增删改查和分页、SpringMVC开发及使用拦截器检查登录等知识点。详细介绍 http://blog.csdn.net/autfish/article/details/52037354

    maven 关于 scope test 和 继承传递的问题

    本文将深入探讨"Maven中scope test的使用以及依赖继承传递"这一主题,帮助开发者更好地理解和应用Maven的核心特性。 首先,`scope test`是Maven依赖管理中的一个关键概念。当我们在`pom.xml`文件中为某个依赖设置`...

    version-maven-plugin:简单易用的maven继承聚合项目的版本号变更插件

    用于对Maven聚合继承项目的版本号进行便捷变更的工具 在使用RPC框架的微服务架构中,为了让服务消费者实现像调用本地方法一样的透明的通过网络进行RPC,服务提供者一般会提供立面jar用于服务消费者集成并通过动态...

Global site tag (gtag.js) - Google Analytics