1.什么是Maven?
Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中…
Maven是一款跨平台的项目管理工具,是一个开源的项目…
Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理…
POM怎么理解呢???
我们使用Java是面向对象编程,对象就是我们的类
而Maven是面向项目,把我们的项目看做成是一个对象来进行管理
2.为什么要使用Maven??
在没有使用Maven之前,我们的jar包是不是非常杂乱???看一下我存放jar包的地方
在没有学习Maven之前,我还想过把这些jar包一一整理出来,万一硬盘坏了,那我的jar包又要去重新找了…而且由于jar包版本的问题,已经吃过不少亏…这就需要大量时间去整理jar包了…
曾经想手动打jar包,结果Intellij idea好像不太支持这种功能??【我还没找到】…于是只能依靠原生的jar 命令去打jar包了,过了一阵子,想重新打jar包的时候,又忘记命令了…非常苦恼…
而我们的Maven就非常好地解决了上面这两种情况了,当然了,Maven的功能并不是只有这么一丢丢,我只是举了两个小例子而已…随着我们的学习,你将会看到Maven的强大之处…
Maven可以管理项目的整个声明周期,包括清除、编译,测试,报告、打包、部署等等。
自动构建项目
软件开发: 可行性分析、需求分析、软件设计、软件开发、发布、运维
软件构建: 软件已经开发完毕,需要构建成一个产品进行发布
构建步骤:
清除–> 编译–>测试–>报告–>打包(jarwar)–>安装–>部署到远程 maven可以通过一个命令实现自动构建软件项目
Maven拥有“约定优于配置“这么一个理念,也就是说,把一些规范约定下来,人们就这么用!如果我们事先约定好所有项目的目录结构,标准开发过程(编译,测试) , 所有人都遵循这个约定。软件项目的管理就会变得简单很多。比如:如何过马路(红灯停绿灯行),如何开门,关门等。
3.安装maven
下载maven --配置环境变量(mvn -v/version测试是否配置成功)–设置setting文件,在我们Maven中,有本地仓库这么一个概念,我们可以在settings.xml配置文件中修改本地仓库的位置 自己新建一个repository的文件夹 例如:在setting文件55行 D:\My_Java\springboot\Maven\repository
然后在133行设置:
mavenpro
admin
admin
然后在idea中配置maven setting–搜索maven 配置下载的maven文件的setting路径,本地仓库的路径自动匹配
就差不多了配置完了
4.Maven目录
1.bin:含有mvn运行的脚本
2.boot:含有plexus-classworlds类加载器框架
3.conf:含有settings.xml配置文件
4.lib:含有Maven运行时所需要的java类库
5.Settings.xml 中默认的用户库: ${user.home}/.m2/repository[通过maven下载的jar包都会存储到指定的个人仓库中]
6.Maven默认仓库下载地址在: maven的lib目录下maven-model-builder-3.0.4.jar的pom.xml中
5.仓库
本地仓库
Maven会把我们项目所构建出来的jar包等等资源存放在本地仓库中。当我们需要jar包的时候,Maven第一时间也是去本地仓库中寻找jar包(就是在setting中配置的那个路径);
私有服务器
存储一些jar包的服务器,由于本地仓库不可能拥有大部分的jar包,一个团队要去开发,免不了总是去中心仓库下载,这就非常耗费时间了。如果私有服务器拥有这些jar包,那么每台电脑就不用去中心仓库中下载了…
中心仓库:
当Maven在本地仓库和私服找不到我们需要的jar包的时候,就去中心仓库中帮我们下载对应的jar包。那Maven怎么知道去哪里下载呢??其实Maven已经配置好的了
5.Maven生命周期的理解:(详情请参考:https://www.cnblogs.com/EasonJim/p/6816340.html)
二、构建生命周期是由阶段组成的:
这些构建生命周期中的每一个由构建阶段的不同列表定义,其中构建阶段表示生命周期中的阶段。
例如,默认(default)的生命周期包括以下阶段(注意:这里是简化的阶段,用于生命周期阶段的完整列表,请参阅下方生命周期参考):
验证(validate) - 验证项目是否正确,所有必要的信息可用
编译(compile) - 编译项目的源代码
测试(test) - 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
打包(package) - 采用编译的代码,并以其可分配格式(如JAR)进行打包。
验证(verify) - 对集成测试的结果执行任何检查,以确保满足质量标准
安装(install) - 将软件包安装到本地存储库中,用作本地其他项目的依赖项
部署(deploy) - 在构建环境中完成,将最终的包复制到远程存储库以与其他开发人员和项目共享
6.maven坐标
坐标的组成: groupId + artifactId+ version
groupId:组id ,机构名,公司名:好比公司的id,或者是公司包名
artifactId:构建物id ,产品名或者产品的id
version :版本号
jar包组成:
artifactId-version.jar
test/compile
test/compile的区别: :依赖的jar包必须是 compile 范围,假如是test范围,则发布的jar包不会包含test范围依赖的jar包,和依赖关系