Maven

本文详细介绍了Maven的核心概念,包括约定的目录结构、POM、坐标、依赖、仓库、生命周期、插件、目标、继承和聚合。强调了POM在Maven工程中的重要性,坐标用于在仓库中定位项目,依赖管理和仓库的使用,特别是本地和远程仓库。还讨论了依赖范围,如compile、test和provided,并解释了依赖的传递性和排除机制。此外,文章还提到了统一管理依赖版本的方法以及Maven生命周期的执行顺序。最后,通过继承实现多个模块工程中依赖版本的一致性管理。
https://mvnrepository.com/

Maven的核心概念
①约定的目录结构
【1】根目录:工程名
【2】src目录:源码
【3】pom.xml文件:Maven工程的核心配置文件
【4】main目录:存放主程序
【5】test目录:存放测试程序
【6】java目录:存放java源文件
【7】resources目录:存放框架或其他工具的配置文件

②POM (Project Object Model,项目对象模型),pom.xml对于Maven工程是核心配置文件,与构建工程相关的一切设置都在这个文件中进行配置。

③坐标
Maven的坐标使用下面三个向量在仓库中唯一定位一个Maven工程
【1】groupid:公司或组织域名倒序 + 项目名 <groupid>com.huawei.maven </groupid>
【2】artifactid:模块名<artifactid>Hello</artifactid>
【3】version:版本<version>1.0.0</version>
Maven工程的坐标与仓库中路径的对应关系
在这里插入图片描述

④依赖
⑤仓库
⑥生命周期/插件/目标
⑦继承
⑧聚合

常用Maven命令
注意:执行与构建过程(包括:编译、测试、打包……)相关的Maven命令,必须进入pom.xml所在的目录

1、mvn clean:清理
2、mvn compile:编译主程序
3、mvn test-compile:编译测试程序
4、mvn test:执行测试
5、mvn package:打包 
6、mvn install:将包安装至本地仓库,以让其它项目依赖
7、mvn deploy:将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行

仓库
1、仓库的分类
【1】本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
【2】远程仓库

  • 私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
  • 中央仓库:架设在Internet上,为全世界所有Maven工程服务
  • 中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度

2、仓库中保存的内容:Maven工程
【1】Maven自身所需要的插件
【2】第三方框架或工具的jar包
【3】自己开发的Maven工程

依赖
1、Maven解析依赖信息时会到本地仓库中查找被依赖的jar包
对于自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库。
2、依赖的范围
在这里插入图片描述
【1】compile范围依赖

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与

【2】test范围依赖

  • 对主程序是否有效:无效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与

【3】provided范围依赖

  • 对主程序是否有效:有效
  • 对测试程序是否有效:有效
  • 是否参与打包:不参与
  • 是否参与部署:不参与

依赖的传递性,好处:可以传递的依赖不必在每个模块工程中都重复声明,在最下面的.pom文件中导入一次即可。注意:非compile范围(test范围、provided范围)的依赖不能传递。

依赖的排除,设置方式
在这里插入图片描述
依赖的原则
【1】作用:解决模块工程之间的jar包冲突问题
【2】验证路径最短者优先原则
在这里插入图片描述
【3】验证路径相同时先声明者优先
在这里插入图片描述
统一管理依赖的版本号
建议配置方式
1、使用properties标签内使用自定义标签统一声明版本号
在这里插入图片描述
2、在需要统一版本的位置,使用${自定义标签名}引用声明的版本号
在这里插入图片描述

生命周期
①各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
②Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
③Maven核心程序为了更好地实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期中点的哪一个阶段,都是从这个生命周期最初的位置开始执行。
④插件和目标
【1】生命周期的各个阶段仅仅定义了要执行的任务是什么。
【2】各个阶段和插件的目标是对应的。
【3】相似的目标由特定的插件来完成。
在这里插入图片描述
继承
由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。需求:统一管理各个模块工程中对junit依赖的版本。解决思路:将junit依赖统一提取到“父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准,同时也便于修改。操作步骤:
【1】创建一个Maven工程作为父工程,注意:打包的方式pom
【2】在子工程中声明对父工程的引用
在这里插入图片描述
【3】将子工程的坐标中与父工程坐标中重复的内容删除
在这里插入图片描述
【4】在父工程中统一管理junit的依赖
在这里插入图片描述
【5】在子工程中删除junit依赖的版本号部分
在这里插入图片描述
注意:继承父工程后要先安装父工程

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值