maven基础
maven的概念和作用
maven是什么?
传统项目很容易导致jar包不统一,jar不兼容问题
maven是基于项目对象模型(pom),可以通过一段配置来管理项目的构建
工程之间有两种关系:依赖和聚合
maven的作用
项目构建:提供标准的、跨平台的自动化项目构建方式
依赖管理:方便快键的管理项目依赖的资源(jar包),避免资源建的版本冲突问题
统一开发结构:提供标准的、统一的项目结构
maven的下载和安装
去官网下载并安装,配置环境变量,使用mvn命令验证
maven基础概念
仓库:用于存储资源,包含各种jar包
仓库分类:
中央仓库:是Maven公司自己维护的仓库,里面有大量的常用类库,并包含了世界上流行的开源软件项目包。
本地仓库:Maven工程中依赖的构件(jar包)从远程下载到本机目录中,一般情况下我们会指定本地仓库路径,从网上下载jar放到本地仓库中,项目每次使用时候直接从本地仓库中拿就可以了。
第三方仓库:一般是由公司设立的仓库,供本公司所有项目使用,减少了向中央仓库访问请求,提高了工作效率。私服必须单独配置,如果没有配置那么不使用私服。
坐标
-
什么是坐标?
maven中坐标就是用于描述仓库中资源的位置
-
maven坐标主要组成
groupId:定义当前maven项目隶属组织名称
artifactId:定义当前maven项目名称
version:当前项目的版本号
org.seleniumhq.selenium
selenium-java
2.45.0-alfresco
maven jar包查询地址:https://mvnrepository.com/
仓库配置
本地仓库配置
maven默认的地址是放在c盘,但是作为系统盘,鉴于jar包的数量,我们需要将其更改位置存储
1、打开你maven安装的位置,打开conf/settings.xml文件,定位到localRepository
2、可以看到注释掉的代码,default默认在系统盘
远程仓库配置
maven默认是从中央仓库获取资源,但是中央仓库是在国外,我们去访问速度肯定是会慢的,此时我们就要使用镜像仓库配置,阿里云镜像仓库
也是一样在settings.xml文件中定位到mirrors位置
maven项目构建命令
编译:mvn compile --src/main/java目录java源码编译生成class (target目录下)
测试:mvn test --src/test/java 目录编译
清理:mvn clean --删除target目录,也就是将class文件等删除
打包:mvn package --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下
安装:mvn install --将压缩文件(jar或者war)上传到本地仓库
部署|发布:mvn deploy --将压缩文件上传私服
pom.xml
依赖管理
依赖配置
依赖指当前项目运行所需要的jar,一个项目可以设置多个依赖
格式:
--设置当前项目所有依赖的jar
--设置具体依赖
--依赖的信息
com.oracle
ojdbc6
11.2.0.3
依赖传递
比如说 A 依赖于 B模块的内容,则可以将B配置到A的配置中,此时A就会具有B中依赖的所有jar包
可选依赖
在上面依赖传递中,如果B配置中不想让A知道自己用了什么依赖则可以在依赖中使用
排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
比如A依赖了B,拥有了B中依赖的jar,但是A本身不想使用则可以使用
依赖范围
依赖的jar默认情况可以再任何地方使用,可以通过scope标签设定其作用范围
scope>compile
作用范围:
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件范围内)
是否参与打包(package指令范围内)
生命周期与插件
构建生命周期
maven高级
分模块开发与设计
聚合
多模块构建维护
将模块拆分成多模块之后,当ssm_dao层更新版本后,比如其他模块也会被影响,那要如何解决,就必须要将其他模块一起更新,但是模块互相独立,所以就需要一个模块来管理这些分模块。
只需再新增一个模块,再这个模块的pom文件中加上
那如何去管理这些模块呢?
总结:
聚合的作用就是用于快速构建maven工程,一次性构建多个项目/模块
制作方式:
1、创建一个空模块,打包类型定义为pom
2、定义当前模块进行构建操作时关联的其他模块名称
模块名
模块名
3、模块的类型
- pom
- war
- jar
注意:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
继承
模块之间依赖关系,不同的模块之间其资源依赖是不一样的,但是由于相互依赖,可能导致其中一个模块的资源的版本与另外一个起冲突,为了解决这个问题,我们可以使用一个模块来对这些总资源进行管理,也就是子模块在使用的时候只需要输入要依赖的资源名,不需要输入资源的版本号
在子模块中可以 定义该工程的父工程
总结:
继承的作用可以通过继承实现在子工程中 沿用父工程的配置
maven中的继承和java相似,在子工程中配置继承关系
制作方式:
1、在子工程中声明其父工程的坐标和对应位置
2、在父工程中定义依赖管理
3、在子工程中定义资源依赖关系,无需再声明依赖版本了,版本按照父工程中依赖的版本
为此解决了多模块之间依赖版本不统一问题
继承和聚合的区别?
聚合用于快速构建项目,继承用于快速配置
相同点:
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两类关系制作到同一个pom文件中
- 聚合与继承属于设计性模块,并无时间的模块内容
不同点:
聚合是在当前模块中配置关系,聚合可以知道参与聚合的模块有哪些
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
属性
Maven属性是值占位符,如Ant中的属性。它们的值可以通过使用符号${X}在POM中的任何位置访问,其中X是属性。
在命令行使用属性时,是-D,比如:mvn -Dinput=test
也就是在管理依赖时,一个项目如果存在多个依赖,你一个个去看每个依赖的版本就得去找,这时候我们就可以统一在主管理模块中统一位置配置一个变量名,版本再取这个变量名
属性类别:自定义属性、内置属性、setting属性、java系统属性、环境变量属性
-
自定义属性
作用等同于定义变量,方便统一维护
版本管理
工程版本
SNAPSHOT(快照版本)
- 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
- 快照版本会随着开发的进展不断更新
RELEASE(发布版本)
- 项目开发进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本对应的构建文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
工程版本号约定
资源配置
资源配置多文件维护
多环境开发配置
在pom文件中使用
继续努力学习啊!!