Maven - 继承和聚合

maven聚合和继承 该资源包含了一个maven聚合和继承的简单demo,可以参考博客http://blog.youkuaiyun.com/mockingbirds/article/details/47374127 立即下载

*聚合(多模块)

             在一个项目中 往往有多个模块组成  例如有项目demo  下面有a, b两个模块

             为了能使用一条命令就能构建demo-a, demo-b两个模块, 需要创建一个额外的聚合模块, 然后通过该模块构建整个项目的所有模块。

              聚合模块(demo-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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.x.demo</groupId>
  <artifactId>demo-parent</artifactId>
  <packaging>pom</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo-parent Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <modules>
  	<module>../demo-a</module>
  	<module>../demo-b</module>
  </modules>
</project>

             模块a(demo-a) 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.x.demo</groupId>
  <artifactId>demo-a</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo-a Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <build>
    <finalName>demo-a</finalName>
  </build>
</project>

             模块b(demo-b) 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.x.demo</groupId>
  <artifactId>demo-b</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo-b Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <build>
    <finalName>demo-b</finalName>
  </build>
</project>

      额外模块(demo-parent) pom中的modules节点有多个module,每个module的值都是一个被聚合模块的相对目录。

     关于聚合模块目录与其他模块的目录主要有两种形式:

      a.父子关系:

     

         父子关系  聚合模块的pom:

  <modules>
  	<module>demo-a</module>
  	<module>demo-b</module>
  </modules>

      a.平行目录:

    

         平行目录  聚合模块的pom:

  <modules>
  	<module>../demo-a</module>
  	<module>../demo-b</module>
  </modules>

    最后在聚合模块(demo-parent)的pom上面 运行mvn命令 根据聚合顺序依次构建多个模块。

*继承

       上面的例子中, a,b两个模块都依赖junit, 为了消除重复,可以使用pom的继承,以达到一处声明,多处使用的目的。

      聚合模块(demo-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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.x.demo</groupId>
  <artifactId>demo-parent</artifactId>
  <packaging>pom</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo-parent Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
   <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
   <modules>
  	<module>../demo-a</module>
  	<module>../demo-b</module>
  </modules>
</project>

             模块a(demo-a) 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <parent>
    <groupId>com.x.demo</groupId>
    <artifactId>demo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../demo-parent/pom.xml</relativePath>
  </parent>
  
  <artifactId>demo-a</artifactId>
  <name>demo-a Maven Webapp</name>
  
  <build>
    <finalName>demo-a</finalName>
  </build>
</project>

             模块b(demo-b) 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.x.demo</groupId>
    <artifactId>demo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../demo-parent/pom.xml</relativePath>
  </parent>
  
  <artifactId>demo-b</artifactId>
  <name>demo-a Maven Webapp</name>
  
  <build>
    <finalName>demo-b</finalName>
  </build>
</project>

   parent元素声明父模块,parent下的子节点groupId,artifactId,version指定父模块的坐标,这三个元素是必须的。

   节点relativePath指定父模块pom的路径,默认值是:../pom.xml,也就是说父pom在上一层目录,(<relativePath>../demo-parent/pom.xml</relativePath> 表示父模块pom和子模块是平行目录)

可以被继承的POM元素:

groupId:项目id,项目坐标的核心元素

version:项目版本,项目坐标的核心元素

description:项目描述信息

organization:项目组织信息

inceptionYear:项目创世年月

developers:项目开发者信息

contributors:项目贡献者信息

distributionManagement:项目部署配置

scm:项目的版本控制信息

mailingLists:项目邮件列表信息

properties:自定义的属性

dependencies:项目的依赖配置

dependencyManagement:项目的依赖管理配置

repositories:项目的仓库配置

build:项目源码目录配置。输出目录配置,插件配置等。

*依赖管理

             父模块(demo-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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.x.demo</groupId>
  <artifactId>demo-parent</artifactId>
  <packaging>pom</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo-parent Maven Webapp</name>
  <url>http://maven.apache.org</url>

	<!-- dependencyManagement 定义的依赖  需要在子pom中声明  不然不会产生效果 -->
	<dependencyManagement>  
 	  <dependencies>
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>3.8.1</version>
	      <scope>test</scope>
		</dependency>
  	</dependencies>
 </dependencyManagement>
  
  <modules>
  	<module>../demo-a</module>
  	<module>../demo-b</module>
  </modules>
</project>

             模块a(demo-a) 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <parent>
    <groupId>com.x.demo</groupId>
    <artifactId>demo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../demo-parent/pom.xml</relativePath>
  </parent>
  
  <artifactId>demo-a</artifactId>
  <name>demo-a Maven Webapp</name>

  <properties>
  	<mail.version>1.4.1</mail.version>
  </properties>
  
   <dependencies>
   		<!-- 声明父pom中的依赖  这样才会真正被使用 -->
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
		</dependency>
		
		<!-- 扩展依赖  父pom中并没有声明 不会影响到父POM 和其他模块 -->
		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>${mail.version}</version>
		</dependency>
  	</dependencies>
  	
  <build>
    <finalName>demo-a</finalName>
  </build>
</project>
             模块b(demo-b) 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.x.demo</groupId>
    <artifactId>demo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <relativePath>../demo-parent/pom.xml</relativePath>
  </parent>
  
  <artifactId>demo-b</artifactId>
  <name>demo-a Maven Webapp</name>
  
  <!-- 没有声明父pom中的依赖  不会被使用 -->
  
  <build>
    <finalName>demo-b</finalName>
  </build>
</project>

父POM 中使用dependencyManagement 声明的依赖不会给子模块引入依赖, 只会继承这段配置。

在模块a(demo-a) pom中声明了父pom中junit依赖 在执行的时候才会获得真正的依赖信息。

模块b(demo-b) pom中没有声明父pom中junit依赖 不会产生实际效果。

maven继承与聚合代码 这里是maven继承与聚合代码。 立即下载

相关推荐

在统信UOS Server 20上踩坑记:手把手教你搞定openGauss 5.0.0企业版安装(附常见报错解决方案)

本文详细记录了在统信UOS Server 20上安装openGauss 5.0企业版的实战经验,包括环境准备、依赖库问题、目录权限、内存参数调优等常见问题的解决方案。通过伪装系统标识、建立软链接、调整内存参数等方法,成功克服国产操作系统与企业级数据库的兼容性挑战,为开发者提供了一份深度排雷指南。

weixin_28698059的博客 264

【Maven学习】maven继承和传递依赖

本篇我们将学习maven的继承机制、依赖之间的传递性以及maven是如何解决依赖冲突的。 maven继承 在maven中,子项目是可以继承父项目的依赖的,假设父项目引入了junit依赖,子项目继承父项目,虽然子项目没有引入junit依赖,但是子项目会继承父项目的依赖,从而使用junit依赖。请看例子:现在新建了一个父项目mavenParent,它的目录结构如下,有一个Hello.java和对应...

fxkcsdn的博客 1万+

modbus

从机地址 功能码 起始地址高位 起始地址低位 数量高位 数量低位 字节数 0001H高位 0001H低位 0002H高位 0002H低位 CRC高位 CRC低位。每个输入寄存器的长度为2个字节。其中,CDH对应线圈0013H到001AH的内容,01H对应线圈001B到001CH的内容,未使用位用0填充。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。

lunhuicnm的博客 9750

Maven高级知识——分模块开发、继承与聚合

所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多个模块进行开发。 继承与聚合对比 作用 聚合用于快速构建项目 继承用于简化依赖配置、统一管理依赖 相同点: 聚合与继承的pom.xml文件打包方式均为pom,通常将两种关系制作到同一个pom文件中 聚合与继承均属于设计型模块,并无实际的模块内容 不同点: 聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

zyxzyx666的博客 1524

售货机非现金支付开发指南:MDB协议下VPOS刷卡器的那些坑

本文深入探讨了MDB协议下非现金支付设备的开发实践,重点解析了NAYAX VPOS刷卡器的集成难点与解决方案。从RS232通信参数配置到Always idle功能实现,提供了一套完整的售货机支付系统开发指南,帮助开发者规避常见陷阱,提升设备兼容性与交易稳定性。

weixin_29258297的博客 134

一文看懂 SAP Integration Suite:从架构治理、接口编排到事件驱动的集成全景

SAP Integration Suite是企业数字化转型中的关键集成平台,通过统一的方法论和工具链解决系统互联、数据对齐和流程协同等复杂问题。其核心能力包括:1)集成评估(Integration Assessment)提供战略规划框架;2)迁移评估(Migration Assessment)支持从传统平台向云的平滑过渡;3)云集成(Cloud Integration)实现日常业务流程编排;4)集成顾问(Integration Advisor)简化B2B标准映射;5)贸易伙伴管理(TPM)优化外部协作流程;

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 501

Maven工程 — 继承与聚合 相关知识点详解

这篇帖子主要讲解Maven工程中的继承与聚合的相关知识点,用简洁的语言和小编自己的理解,深入浅出的说明Maven工程的继承与聚合。

Wang_ning__的博客 981

如何用libwebsocket库在stm32F407上实现websocket客户端?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1134

Maven高级:聚合和继承

Maven高级:分模块开发 Maven高级:依赖管理我们的项目已经从以前的单模块,变成了现在的多模块开发。项目一旦变成了多模块开发以后,就会引发一些问题,在这一节中我们主要会学习两个内容和,用这两个知识来解决下分模块后的一些问题。项目少的话还好,但是如果项目多的话,一个个操作项目就容易出现漏掉或重复操作的问题,所以我们就想能不能抽取一个项目,把所有的项目管理起来,以后我们要想操作这些项目,只需要操作这一个项目,其他所有的项目都走一样的流程,这个不就很省事省力。这就用到了我们接下来要讲解的聚合,关于聚合具体的

黑马程序员官方博客 1276

硬件工程师笔记——电子器件汇总大全

本文系统总结了14种常用电子器件的工作原理及功能应用,包括电阻、压敏电阻、电容、电感、二极管、三极管、MOS管、晶振、光耦、IGBT、继电器、磁珠、可控硅和线性稳压器。每种器件从结构原理、工作特性到典型应用进行全面解析,如电阻的限流分压、电容的储能滤波、三极管的放大开关等。重点阐述了各器件在电路设计中的关键作用,如IGBT的功率控制、继电器的隔离保护、LDO的电压稳定等,并提供了实际电路应用案例。文章还整理了硬件工程师笔试面试相关的知识点和真题资源,为电子工程师提供全面的技术参考。

XU157303764的博客 2万+

让 ABAP Screen Variant 安稳上车:SHD0 与 SHD0_MANDT 的 Transport 全攻略

摘要: SAP项目常需优化交易码界面,通过SHD0的Transaction Variant和Screen Variant可实现字段精简、默认值预设及权限控制,避免修改标准代码。但跨系统迁移时易出现变式丢失或版本兼容问题。核心概念包括: Screen Variant:针对单个屏幕的字段属性配置(跨Client); Transaction Variant:串联多屏幕变式(分跨Client和Client-specific); 版本差异:4.70/6.x后需区分SHD0(跨Client)与SHD0_MANDT(Cl

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 226

maven聚合工程详解

本篇文章重点针对这几个问题进行讲解:1. Maven继承2. 使用IDEA搭建Maven父子工程 3. 使用IDEA搭建Maven聚合工程4. Maven父子工程和聚合工程的区别

怪咖@的博客 5087

如何解除Uniaccess管控??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2388

【Maven】继承和聚合

通过继承可以实现子工程沿用父工程的配置,大大减少重复设置。 聚合就是集中构建项目的。继承和聚合很相似,只是继承具有依赖关系,而聚合是统一构建毫无关系的模块。

m0_46308522的博客 1512

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Maven中聚合和继承的区别

Maven中聚合和继承的区别 一、聚合 1、我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。 2、所谓聚合,顾名思义,就是把多个模块或项目聚合到一起,我们可以建立一个专门负责聚合工作的Maven 工程。 3、注意以下特点: 1. 聚合模块...

HaHa_Sir的博客 4070

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Maven继承和聚合

比如我们在项目开发的过程中,可能多个模块独立开发,但是多个模块可能依赖相同的公共模块,比如说每个模块都需要javaseo-utils,在编译的时候,maven-compiler-plugin插件也要被引入,maven仓库地址以及发布目录都是相同的配置。我们可以使用Maven的继承功能,把公共的配置信息写到父模块中,子模块只要继承了该父模块,也会继承父模块的配置信息。build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等;version :项目版本,项目坐标的核心元素;

qq_63964907的博客 999

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Maven中的继承和聚合

一. 继承和聚合 1. 什么是继承? maven为了消除重复,把很多相同的配置提取出来, 放入一个父项目的pom.xml中 例如:grouptId,version等 2. 什么是聚合? 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 … 3. 继承与聚合的关系 继承主要为了消除重复 聚合主要为了快速构建项目

技术人生 1141

如何理解Maven的聚合和继承

如何理解Maven的聚合和继承 一、创建 run-root 项目 1、步骤略 , clipse中创建maven pom工程 2、格式如下: 二、创建 run-commons 项目 1、一个普通的java项目,步骤略。 2、如下: 三、配置聚合 1、在 run-root 项目的pom.xml中,添加modules标签,取值为 run-commons 项目的artifactId 。 ...

HaHa_Sir的博客 3200

Maven的继承和聚合

标签包裹的依赖,默认不会传递给子级,需要子级手动引入相关依赖,父级只做依赖的版本管理。指的是,当对父项目进行构建等操作时,自动会构建其内的所有子项目。标签包裹的依赖,将会无条件传递给子级,与依赖范围无关。指的是,子项目继承父级Maven项目的。在父级pom.xml中,使用。在父级pom.xml中,使用。

wytccc的博客 1230

Maven的聚合和继承有什么区别?

点击关注“Java技术精选”,选择“置顶或者星标”精选最新技术文章,与你一起成长用了 Maven 好几年了,许多人还是只懂得简单的依赖坐标。对于 Maven 的聚合和继承...

陈树义 1856

Maven高级-聚合和继承

两种之间的作用: * 聚合用于快速构建项目,对项目进行管理 * 继承用于快速配置和管理子项目中所使用jar包的版本 聚合和继承的相同点: * 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中 * 聚合与继承均属于设计型模块,并无实际的模块内容 聚合和继承的不同点: * 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些 * 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

Eumenides_Suki的博客 1629

【maven】---聚合和继承

前言     自从我知道写maven实战这本书的作者长得随心所欲后,我再拿起这本书真心的不想看前言了。下面分享一下maven中的所谓的聚合和继承。 内容 下文中的子本指的是:多个maven项目。         父本指的是:maven的父项目。 聚合     Maven的另一个更加值得瞻仰的地方,就是多个maven项目之间可以建立某种联系。比如:多个maven项目,我们都想发布成wa

好学若饥,谦卑若愚 2850

Maven高级的聚合和继承

项目少的话还好,但是如果项目多的话,一个个操作项目就容易出现漏掉或重复操作的问题,所以我们就想能不能抽取一个项目,把所有的项目管理起来,以后我们要想操作这些项目,只需要操作这一个项目,其他所有的项目都走一样的流程,这个不就很省事省力。这样我们就可以解决刚才提到的第一个问题,将子项目中的公共jar包抽取到父工程中进行统一添加依赖,这样做的可以简化配置,并且当父工程中所依赖的jar包版本发生变化,所有子项目中对应的jar包版本也会跟着更新。我们的项目已经从以前的单模块,变成了现在的多模块开发。

2302_79020600的博客 1114

maven 继承和聚合的区别

在实际项目中,大家会发现一个 pom 既是聚合 pom,又是父 pom,这么做主要是为了方便。

stomfeng的专栏 1122
上一篇: 大型网站架构演变和知识体系
下一篇: Maven - 生命周期
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值