Maven 模块继承、聚合

Maven

POM(项目对象模型): 通过XML配置项目的依赖,自动完成项目构建

pom.xml 标签


  • modelVersion: pom.xml 版本
  • groupId:项目组,一般用公司名:com.baidu.....
  • artifactId: 项目模块
  • version: 项目版本号
  • packaging: 打包方式(默认jar包)
  • scope:包作用域(默认compile:test/provided/runtime)
  • properties:POM属性
  • dependencies:项目依赖包

maven坐标


groupId、artifactId、version 3个标签构成软件包坐标,类似数据库主键唯一标识1条记录

Maven 聚合


多个Maven项目通过modules标签整合在1个模块中,实现模块组生命周期的统一管理

Maven 继承


子模块继承父模块的属性、依赖等元素,实现POM元素的复用,方便统一管理

测试案例


子类工程:maven_child

<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>maven_child</artifactId>
  <packaging>jar</packaging>
  <name>maven_child</name>

  <parent>
	  <groupId>com.zhiwei</groupId>
	  <artifactId>maven_parent</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <relativePath>../maven_parent/pom.xml</relativePath>
  </parent>

 <!--配置maven工程属性-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
   <!-- 父模块引用:可省略版本号,由父模块统一管理 -->
   <dependency>
	   <groupId>junit</groupId>
	   <artifactId>junit</artifactId>
	   </dependency>
  </dependencies>
</project>

子类工程:maven_brother

<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>
  <parent>
	  <groupId>com.zhiwei</groupId>
	  <artifactId>maven_parent</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <relativePath>../maven_parent/pom.xml</relativePath>
  </parent>

  <artifactId>maven_brother</artifactId>
  <packaging>jar</packaging>
  <name>maven_brother</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      	<groupId>junit</groupId>
      	<artifactId>junit</artifactId>
    </dependency>
    
    <!-- 引入依赖模块: maven_child -->
    <dependency>
		<groupId>com.zhiwei</groupId>
		<artifactId>maven_child</artifactId>
		<!-- 依赖模块放入父模块里面,可省略版本号 -->
		<!-- <version>0.0.1-SNAPSHOT</version>-->
    </dependency>
  </dependencies>
</project>

父工程: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">
 <modelVersion>4.0.0</modelVersion>

<!--
父模块:定义整个maven项目的依赖、版本等信息
继承: 子模块可以直接引用父模块依赖包的定义,避免重复定义

dependencesManagement:定义子模块可能使用的依赖包,不强制子类一定会继承
dependences: 定义子模块需要使用的依赖包,子类强制继承

注意:父类的groupId、artifactId、version只可部分继承,但不能全部继承(唯一性)
  -->

  <groupId>com.zhiwei</groupId>
  <artifactId>maven_parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <!-- 注意父模块和聚合模块只能以pom形式打包部署 -->
  <packaging>pom</packaging>
  <name>maven_parent</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
  <!-- 
  聚合:父类模块构建时,继承该父类模块的子模块统一构建,实现自动化构建和部署 -->
  <modules>
	  <module>../maven_child</module>  <!-- 子模块的pom.xml相对路径 -->
	  <module>../maven_brother</module>
  </modules>

  <!-- 管理子模块可能重复使用的包:子模块可根据需要自选择父模块定义的依赖包      -->
  <dependencyManagement>
  <dependencies>
    <dependency>
		 <groupId>junit</groupId>
		 <artifactId>junit</artifactId>
		 <version>4.7</version>
		 <scope>test</scope>
    </dependency>
    
    <!--父模块可将子模块设定为依赖,例如提供整个maven项目最基础的功能-->
    <dependency>
		<groupId>com.zhiwei</groupId>
		<artifactId>maven_child</artifactId>
		<version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
  </dependencyManagement>
</project>

特别注意

maven_brother 依赖于maven_child项目,maven_child若未成功构建,maven_brother也无法构建

转载于:https://my.oschina.net/yangzhiwei256/blog/3007837

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值