Maven是什么
在WebGoat的学习笔记里我们提到过Maven,其作用是包管理软件,当真实的接触到Java工程的时候,发现包管理只是其一个功能。
为什么需要Maven
开发包的载入
写程序的都知道,都是面向Copy编程,能用轮子就用轮子,不要自己作死去造轮子,有很多吊毛非觉得大家都用的轮子不够圆,然后自己造个方的。。。。
所以说写程序需要别人现成的代码,但是别人怎么给你呢。。。总不能粘贴复制然后QQ发给你吧。。。所以就会打包成开发包发给你。。。
以下列举常见的开发包,开发包和「平台」以及「语言」都有关系,这里只是举例不一定正确
Windows | Linux | MacOS | |
---|---|---|---|
C++ | lib/dll | a/so | a/framework |
Java | jar/so | jar/so | jar/so |
OC | - | - | a/framework |
如何加载开发包
在有Maven这种包管理之前,都是在本地建立一个文件夹,一般起名叫做「lib」然后把各种库放在里面,然后从IDE里指定『Path』路径到这个文件夹,例如文章Xcode和IntelliJ加载开发包中的举例。
而Maven所做的工作,『就是把网络上一个地址映射到你本地一个地址』然后使用一个『坐标』的概念拼接出来这个路径。其实质就是一个本地文件夹和云盘的同步
Maven的本质解析
Maven的中央仓库
地址: http://central.maven.org/maven2/
这个就是Maven在网络上的中央仓库,说白了就是个文件夹,里面存了所有在Maven上发布的Jar包
Maven的本地仓库
本地仓库的地址可以从你IDE或者Maven的设置里看到,比如IntelliJ的本地仓库地址
可以看到红色标记处,就是你本地的文件夹 地址:/Users/Apple/.m2/repository
Maven的仓库映射
在配置好了本地仓库之后,就需要使用pom.xml配置文件了,这个文件就是 确定了你要下载哪些Jar包到本地 每次修改pom文件后,Maven就回自动去中央仓库下载,然后加入到你工程的「Project Struct」——「Library」配置里,使用的是本地仓库的路径,如下图
Maven的pom.xml文件
配置文件的解析
Maven的配置文件是个xml文件,其具体有什么标签,代表什么意思,可以去Maven的官方网站文档查询,这里做简单的解释。
1 | <?xml version="1.0" encoding="UTF-8"?> |
- project节点: 该节点代表一个工程或者是一个模块,是pom文件的最外层节点,其下有9个基本节点
- 坐标节点:指的是「groupId」「artifactId」「version」这三个节点,定义了目录信息
- packaging节点:项目编译后打包成Target时生成的格式
- dependencies节点: 重点的重点!规定了Project要加载哪些Jar包
- build节点:编译打包生成相关配置
dependencies与坐标
在上一节里提到,「dependencies」决定了我要使用Maven加载哪些Jar,而里面就是使用坐标这个信息来确定Jar包的,例如
1 | <dependencies> |
坐标的实质
在加载完Pom文件之后,更新一下,待到更新成功,我们去看看Maven到底怎么实现了云盘功能
此处一定要让pom文件加载成功,不然在本地仓库可能找不到对应文件,因为没下载成功
映射和坐标
Maven的整个工作流程就是把路径信息分解成了 「仓库」+「坐标」,如果再仔细点
Library Path | 仓库 | groupId | artifactId | version |
---|---|---|---|---|
中央仓库 | http://central.maven.org/maven2/ | org/springframework/ | spring-core/ | 4.1.9.RELEASE |
本地仓库 | /Users/Apple/.m2/repository | org/springframework/ | spring-core/ | 4.1.9.RELEASE |
我来组成头部
在刚刚提到了Maven有两个仓库「本地仓库」和「中央仓库」,此时你可以按照以下步骤看一下
- 打开浏览器输入中央仓库地址: http://central.maven.org/maven2/
- 打开本地文件夹地址,比如我的是Mac的: /Users/Apple/.m2/repository
- 浏览器里看到了一堆文件夹名,本地也看到了一堆文件夹名
我来组成裤裆
- 先看坐标的「groupId」例如Spring的 org.springframework
- 在浏览器和本地都找到org文件夹进入
- 然后在/org/文件夹里找到springframework文件夹同时进入
- 再来看「artifactId」,从/org/springframework/目录里找到spring-core同时进入
- 是不是看到一堆版本号,然后看「version」坐标,找到「4.1.9.RELEASE」这个文件夹进入
- 是不是在中央仓库的网站和你本地仓库都看到了相同的文件
所以说! 三个坐标加起来其实就是文件目录
Maven的其它功能
Maven除了包管理之外,还可以进「编译」「发布」等等功能,以及Pom文件中和其相关的「build」等标签,这些会在Maven的生命周期简单解释中详细说。