2021-11-06 maven之继承与聚合简述

Maven是一个强大的构建工具,通过继承和聚合特性简化项目管理。继承允许统一管理依赖版本,避免版本冲突,依赖范围如test、provided、compile等定义其作用域。依赖传递确保子模块能获取所需依赖,同时可通过排除机制剔除不需要的依赖。聚合功能则方便多模块项目的批量操作,如clean、install等,通过modules配置模块路径实现整体管理。
摘要由CSDN通过智能技术生成

maven 介绍

maven是一个构建工具,可以帮助我们管理jar包的依赖,当一个项目分功能分模块协同工作时,若导入了不同的jar包,可能会出现意想不到的问题,这种时候就可以使用maven来继承和聚合管理jar包的依赖。

继承

多个模块协同开发时,导入各自得jar包难免会出现版本不一致的问题,使用maven的父类,来统一管理jar包的依赖,还可以使用properties去进行统一的版本管理

依赖的范围

每个依赖可以通过scope设置依赖的影响范围,使用最多的三个:test、provided、compile

  • test:仅在测试有效
  • provided:在编译和测试有效
  • compile:在编译、测试和打包有效

还有一些其它不常用的:import(import在单继承满足不了时使用)、runtime、system

依赖的传递

当A依赖B,B依赖C,若依赖范围是compile,那么A也依赖C(仅当依赖范围是compile的依赖,才能传递依赖)

依赖排除

在传递依赖的过程中,有些依赖是不希望去使用的时,可以使用依赖排除

<dependency> 
	<groupId>com.zsl.</groupId> 
	<artifactId>XXX</artifactId> 
	<version>0.0.1-SNAPSHOT</version> 
	<type>jar</type> 
	<scope>compile</scope> 
	<exclusions> 
		<exclusion> 
			<groupId>commons-logging</groupId> 
			<artifactId>commons-logging</artifactId> 
		</exclusion> 
	</exclusions> 
</dependency> 

统一版本

如下:在父类 pom 中统一管理jar包版本

<properties>
        <zsl.mybatis.version>3.4.6</zsl.mybatis.version>
        <zsl.spring.version>5.1.9.RELEASE</zsl.spring.version>
        <zsl.mybatis-spring.version>1.3.2</zsl.mybatis-spring.version>
        <zsl.mysql-connector.version>5.1.38</zsl.mysql-connector.version>
        <zsl.druid.version>1.1.10</zsl.druid.version>
    </properties>

    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>${zsl.servlet-api.version}</version>
                <scope>provided</scope>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${zsl.mybatis.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${zsl.mybatis-spring.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${zsl.mysql-connector.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${zsl.druid.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${zsl.spring.version}</version>
            </dependency>

            <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${zsl.spring.version}</version>
            </dependency>
            
        </dependencies>
    </dependencyManagement>

聚合

将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作

在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径即可

这样不需要在多个模块逐步操作,在父工程中统一操作。如parent中clean,entity、mapper、web、service、util模块全部进行clean

<modules>
	<module>../book-entity</module>
	<module>../book-mapper</module>
	<module>../book-web</module>
	<module>../book-service</module>
	<module>../book-util</module>
</modules>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值