Maven
一、 Maven简介
Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
1.1 Maven模型
- 项目对象模型 (Project Object Model)
- 依赖管理模型(Dependency)
- 插件(Plugin)
如上图所示就是Maven的模型,而我们先看紫色框框起来的部分,他就是用来完成
标准化构建流程
。如我们需要编译,Maven提供了一个编译插件供我们使用,我们需要打包,Maven就提供了一个打包插件提供我们使用等。
上图中紫色框起来的部分,项目对象模型就是将我们自己抽象成一个对象模型,有自己专属的坐标。
1.2 仓库
在项目中使用坐标来指定项目的依赖,那么依赖的jar包到底存储在什么地方呢?
其实依赖jar包是存储在我们的本地仓库中。而项目运行时从本地仓库中拿需要的依赖jar包。
仓库分类:
- 本地仓库:自己计算机上的一个目录
- 中央仓库:由Maven团队维护的全球唯一的仓库- 地址: https://repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:
- 如果有,则在项目直接引用;
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库。
如果还可以搭建远程仓库,将来jar包的查找顺序则变为:
本地仓库 --> 远程仓库–> 中央仓库
当然,你可以这样理解:
项目中你需要jar包,直接输入依赖坐标即可,项目会首先在你的本地仓库中寻找,有没有这个jar包,如果没有,那他就就要去中央仓库寻找,找到并下载下来。当然有远程仓库的话,你就会访问远程仓库寻找,找到直接下载,没找到再去中央仓库下载。
那么疑问来了,我能去中央仓库下载,干嘛费力要配置个远程仓库过来,中间多一环?
是因为,有的公司会有自己的私服,你配置完之后,下载依赖的速度大大提高,因为中央仓库在外网,下载的费力。当然公司没有自己的私服,我们也可以配置一个阿里云的远程仓库,这样就能提高我们下载依赖的速度。我们后面也会配置阿里云的远程仓管库
Maven最直观,便捷的功能:
平时你需要挨个导入jar包,而有了Maven之后就不用了,我可以直接输入坐标依赖,可以直接使用。方便的很,尤其是项目中需要很多的jar包,挨个去网上下载,岂不是要累死,有了Maven全部搞定。
二、Maven安装配置
1.1 下载安装
官网直通车:https://maven.apache.org/
下载后直接解压即可,因为我之前已经下载过了,所以直接展示即可。
1.2 配置环境变量
右键此电脑,点击
属性
下滑找到,
高级系统设置
配置
环境变量
配置
Path
%MAVEN_HOME%\bin
检测:
mvn -v
这样就是安装成功了。
1.3配置仓库
配置文件在你解压的maven目录下的
conf
文件夹下的
settings.xml
文件
1.3.1 修改本地仓库
我更喜欢把他放在,安装的目录下,所以我新建了
mvn_resp
文件夹,来做本地仓库
<localRepository>D:\apache-maven-3.8.6\mvn_resp</localRepository>
1.3.2 配置阿里云的远程仓库
<mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror>
这样Maven就基本配置完成了。
三、IDEA上配置Maven
1.1 创建Maven项目
打开设置
搜索maven
修改maven路径
修改配置文件路径
这样就OK了,记得以后每次创建maven项目记得,给他修改一下。
四、Maven的基本使用
1.1 Maven常用命令
- compile :编译
- clean:清理
- test:测试
- package:打包
- install:安装
我这里就用步骤三创建的项目演示
来到项目文件目录下(要与pom.xml)同级
直接打开cmd开始操作即可。
1.2 编译
编译完成后,文件目录下会出现一个
target
文件夹,你的字节码文件都会编译到此文件内。
mvn compile
1.3 打包
打包完成后,在你的
target
目录内,会出现jar包,这个jar包就是你的项目内容
mvn package
1.4 测试
这个命令的作用就是,测试你的代码是否报错。
mvn test
1.5 安装
这个作用是,将你的代码打包为jar包,并且下载到你的本地仓库。
mvn install
1.6 Maven 生命周期
Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven 对项目构建的生命周期划分为3套:
- clean :清理工作。
- default :核心工作,例如编译,测试,打包,安装等。
- site : 产生报告,发布站点等。这套声明周期一般不会使用。
同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:
当我们执行
install
(安装)命令时,它会先执行
compile
命令,再执行
test
命令,再执行
package
命令,最后执行
install
命令。
当我们执行
package
(打包)命令时,它会先执行
compile
命令,再执行
test
命令,最后执行
package
命令。
默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的:
五、IDEA中导入依赖
1.1 依赖管理
1.5.1 使用坐标引入jar包
使用坐标引入jar包的步骤:
- 在项目的 pom.xml 中编写
<dependencies>
标签 - 在
<dependencies>
标签中 使用<dependency>
引入坐标 - 定义坐标的 groupId,artifactId,version
- 点击刷新按钮,使坐标生效
或者:
注意:
- 具体的坐标我们可以到如下网站进行搜索
- https://mvnrepository.com/
快捷方式导入jar包的坐标:
每次需要引入jar包,都去对应的网站进行搜索是比较麻烦的,接下来给大家介绍一种快捷引入坐标的方式
- 在 pom.xml 中 按 alt + insert,选择 Dependency(添加依赖项)
- 在弹出的面板中搜索对应坐标,然后双击选中对应坐标
- 点击刷新按钮,使坐标生效
自动导入设置:
上面每次操作都需要点击刷新按钮,让引入的坐标生效。当然我们也可以通过设置让其自动完成
- 选择 IDEA中 File --> Settings
- 在弹出的面板中找到 Build Tools
- 选择 Any changes,点击 ok 即可生效
1.5.2 依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。
如下图所示给
junit
依赖通过
scope
标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。
那么
scope
都可以有哪些取值呢?
依赖范围编译classpath测试classpath运行classpath例子compileYYYlogbacktest-Y-JunitprovidedYY-servlet-apiruntime-YYjdbc驱动systemYY-存储在本地的jar包
- compile :作用于编译环境、测试环境、运行环境。
- test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
- provided :作用于编译环境、测试环境。我们后面会学习
servlet-api
,在使用它时,必须将scope
设置为该值,不然运行时就会报错 - runtime : 作用于测试环境、运行环境。jdbc驱动一般将
scope
设置为该值,当然不设置也没有任何问题
注意:
- 如果引入坐标不指定
scope
标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。
版权归原作者 奔跑的菜鸟Run 所有, 如有侵权,请联系我们删除。