Maven

在这里插入图片描述

一.前言

1.介绍

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理,现为由 Apache 软件基金会主持的独立 Apache 项目。
构建:通过maven命令可以完成项目从清理、编译、测试、打包、部署
依赖管理:对jar包的管理
2.常用命令
清理:clean
编译:compile
测试:test
打包:package
安装:install
3.坐标范例

	<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.47</version>
		</dependency>

4.特点

  • 项目设置遵循统一的规则;
  • 任意工程中共享;
  • 依赖管理包括自动更新;
  • 一个庞大且不断增长的库;
  • 可扩展,能够轻松编写 Java 或脚本语言的插件。

二.依赖传递

2.1依赖传递
在Maven中依赖是可以传递的,道理如同假如有三个项目A,B,C。A依赖B,B依赖C,那么A也依赖C。
在这里插入图片描述
在pom文件中
依赖传递
项目中依赖了dubbo,而dubbo依赖了gson,那么就相当于项目中也依赖了gson,可以使用gson jar包。

2.2依赖冲突
由于有依赖传递现象的存在,会导致项目中不同依赖分别又依赖了不同版本的相同jar,这就造成了依赖冲突
解决:
1.使用maven提供的依赖调解原则
第一声明者优先原则
路径近者优先原则
2.排除依赖
3.锁定版本

查看依赖冲突
我使用的是intellij idea,安装maven helper插件,在要查看的pom.xml文件中有个Dependency Analyzer
在这里插入图片描述
左边为依赖冲突的jar,右边是具体信息

  • Conflicts(冲突)
  • All Dependencies as List(以列表形式查看所有依赖)
  • All Dependencies as Tree(以树形式查看所有依赖)
    1.第一声明者优先原则
    在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。
    比如:
<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>

在这里插入图片描述
在依赖中会优先使用spring-context中的依赖版本
假如我们将pom依赖交换下位置
在这里插入图片描述
再查看maven helper插件显示
在这里插入图片描述
可以看出来目前使用的是5.2.0的版本
2.路径近者优先原则

即直接依赖级别高于传递依赖。我们直接在pom中依赖spring-core 5.2.0.RELEASE版本
在这里插入图片描述

可以看出来直接使用的是就近的5.2.0版本
3.排除依赖
可以使用exclusions标签将传递过来的依赖排除出去

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.2.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.7.RELEASE</version>
        </dependency>

在这里插入图片描述
可以看到spring-aop中不会依赖spring-core了,而是使用spring-context中的spring-core5.2.7版本的
4.锁定版本
采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法在企业开发中经常使用。
版本锁定的步骤:
步骤一:在dependencyManagement标签中锁定依赖的版本

     <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.0.RELEASE</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

步骤二:在dependencies标签中声明需要导入的maven坐标

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
    </dependencies>

pom文件中使用dependencyManagement标签进行版本锁定,并不会真正将jar包导入到项目中,只是对这些jar的版本进行锁定,项目中使用哪些jar包,还需要在dependencies标签中进行声明

三.maven工程的继承

3.1继承

在Java语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非private的属性和方法。同样,在maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码。

被继承的maven项目中pom的部分

    <artifactId>maven</artifactId>
    <groupId>org.example.parent</groupId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

继承的maven项目中的pom的部分,只贴出parent中的部分

    <parent>
        <artifactId>maven</artifactId>
        <groupId>org.example.parent</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

3.2 聚合
在maven工程的pom.xml文件中可以使用标签将其他maven工程聚合到一起,聚合的目的是为了进行统一操作

  <modules>
        <module>parent</module>
        <module>son</module>
    </modules>

四.总结

本文主要介绍了maven操作过程中的部分内容,包括maven的常用命令,依赖传递,依赖冲突的产生和解决,maven工程的继承和聚合,不足之处可以一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值