官方描述:
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information. 翻译:Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从一个中心信息片段管理项目的构建、报告和文档
Maven 是⼀个项目管理工具, 通过 pom.xml
文件的配置获取 jar
包,而不用手动去添加 jar
包。
前面学习 JDBC 的时候,就需要手动的去添加
jar
包,学习了 Maven 就不用去手动添加jar
包了,只需要添加几行代码就可以添加jar
包了。
🚩:为什么要学习 Maven?
简单, 方便, 提高我们的开发效率, 减少我们的开发Bug.
IDEA 本身已经集成了 Maven , 我们可以直接是用, 无需安装
File
-> New
-> Project
Create
,就创建好了 Maven 项目统一项目结构:提供标准、统一的项目结构 任何编译器创建 Maven 项目,其项目的结构都是一样的
Maven 提供了标准的,跨平台(Linux, Windows, MacOS等)的自动化项目构建方式 当我们开发了⼀个项目之后, 代码需要经过编译, 测试, 打包, 发布等流程, 每次代码的修改, 都需要经过这些流程, 如果代码反复调试修改, 这个流程就需要反复进行, 就显得特别麻烦, 而 Maven 给我们提供了⼀套简单的命令来完成项目的构建
比如:是用package
命令就可以对项目进行打包操作
打包就是把所有的 class
文件, 全部放在一起, 打成 jar
包或者 war
包
jar
包和war
包都是⼀种压缩文件
jar
包就是把开发人员已经写好的⼀些代码进行打包. 打好的 jar
包就可以引入到其他项目中, 也可以直接是用这些 jar
包中的类和属性. 另外也可以打成可执行 jar
包, 这样的包就可以通过 java -jar
命令来执行war
包可以理解为是⼀个web
项目,里面是项目的所有东西, 通常用于网站.依赖管理:方便快捷的管理项目的依赖的资源(jar
包),避免版本冲突的问题
pom.xml
就是 Maven 的配置文件,用来描述项目的各种信息
依赖:只当前项目运行的所需要的 jar
包
比如:学习 JDBC 的时候,我们需要手动下载mysql-connector-java-5.1.47
的包,并添加到项目中
如果是用 Maven, 我们只需要在pom.xml
中引入mysql-connector-java
的依赖就可以了
<dependencies>
<!--放置项目需要的依赖坐标,可以多个-->
</dependencies>
pom.xml
文件中<dependencies>
标签内,添加依赖坐标<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
jar
包后续有添加新的
jar
包, 或者修改jar
包版本, 都需要通过该方式在项目中添加依赖.
jar
包早期我们没有是用 maven时, 向项目中添加依赖的jar
包,需要把所有的jar
包都复制到项目工程下.
比如 A 依赖 B, B依赖C, 那么 A项目引入 B 的同时, 也需要引入C, 如果我们手动管理这个依赖, 这个过程就会比较麻烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的?
但是用 maven 的话, 就可以避免管理所需依赖的关系。我们只需要在pom.xml
文件中, 定义直接依赖就可以了, 由于 maven 的依赖具有传递性,所以会自动把所依赖的其他jar
包也⼀起导入
如上图, 项目A 通过Maven 引入 Jar A
时, 会自动引入 Jar B
和 Jar C
.
Jar A
和 项目B就是项目 A的直接依赖.
Jar B
, Jar C
是间接依赖.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.0.6</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<artifactId>spring-jcl</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
通过几行代码就可以把需要的 jar
包放进项目中,是如何做到的呢?
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
这个代码, 我们称之为 “坐标”, 也就是唯一的.
在 Maven中,根据groupId
、artifactId
、version
的配置,来唯一识别一个 jar
包,缺一不可。
当我们在pom.xml
文件中配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库里寻找 jar
包, 并把他下载下来, 添加到项目中. 这个jar
包下载的地方就称为仓库.
仓库:用于存储资源,管理各种jar
包
Maven仓库的本质就是⼀个目录(文件夹),这个目录被用来存储开发中所有依赖(jar
包, 插件等).
Maven仓库分为两大类: 本地仓库和远程仓库. 其中远程仓库又分为中央仓库, 私服 和其他公共库
本地仓库: 自己计算机上的一个目录(用来存储jar
包)
当项目中引入对应依赖jar
包后,首先会查找本地仓库中是否有对应的jar
包
jar
包到本地仓库
idea配置 Maven
file
->Settings
->Maven
查看该仓库目录 可以看到该目录下有很多的jar
(最开始是空的, 随着Maven的使用, 该仓库下文件会越来越多)
中央仓库: maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联网. 由 Maven 团队维护,全球唯一.
仓库地址:网址
可以通过https://mvnrepository.com 这个网址来查询并下载jar
包
jar
包jar
包坐标私服:一般由公司搭建的私有仓库。 私服属于某个公司,或者某个部门 往往需要⼀定权限. 有了私服之后, Maven依赖下载的顺序又发生了变化
当Maven需要下载资源的时候
因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源
如何设置国内源
File
->Settings
C:\APP\Java\apache-maven-3.6.1\conf\settings.xml
不同电脑设置的Maven路径不同
settings
和repository
可以修改设置为其他路径, 两个路径不要有中⽂
Maven 仓库默认是在国外官网, 国内使用时会比较慢,我们可以更换为阿里云的仓库
打开settings.xml
, 在 mirrors
节点上,添加内容如下:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿⾥云公共仓库</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>