声明
1)该文章学习借鉴于金昊霖大佬的maven详解。
2)博主是萌新上路,文中如有不当之处,请各位大佬指出,共同进步,谢谢。
概念
Maven是Apache下的顶级的开源项目(顶级就是指Apache下的项目都是以此为基础开发的),项目管理工具,管理java项目。
特点:
- 1、项目对象模型 (Project Object Model)
POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式。
- 2、依赖管理系统(基础核心)
Maven通过坐标对项目工程所依赖的jar包统一规范管理。
- 3、Maven定义一套项目生命周期
清理、初始化、编译、测试、报告 、打包、部署、站点生成。
- 4、一组标准集合
强调:maven工程有自己标准的工程目录结构、定义坐标有标准。
- 5、Maven 管理项目生命周期过程都是基于插件所完成
原理
1)中央仓库
中央仓库,就是远程仓库,全世界只有一个,仓库中jar包由专业团队(Maven团队)统一维护。而它的服务器就在我们的“脚下”,地球的另一端——英国。
2)私服
局域网中的仓库,一般是在公司内部架设一台私服,其它公司架设一台仓库,对外公开。
3)本地仓库
本地的仓库,它会存储你曾经从Maven仓库中获取的所有jar包依赖,相当于缓存。
Maven第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次会先从本地仓库找,如果找不到才会去远程仓库找。
4)镜像
由于中央仓库服务器离我们太远,再加上访问量大,所以直接重中央仓库下载往往会很慢,甚至下载失败。所以镜像就随之而生,所谓镜像,其实就是中央仓库的复制版,一般选择国内的镜像,这样会使jar下载速率大大提升。比如阿里的镜像仓库。
5)运行机制
当你项目需要添加依赖时,Maven首先会去你的本地仓库找jar包,如果没有则去局域网中的私服仓库找,如果还没有,那就去中央仓库或者镜像中下载(至于去哪个要看你的配置,具体配置后面会讲)。
优势
1)一个项目就是一个工程
如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。
借助于Maven就可以将一个项目拆分成多个工程。
2)项目中使用jar包,需要“复制”、“粘贴”项目的lib中
同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。
借助于Maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。
3)jar包需要的时候每次都要自己准备好或到官网下载
借助于Maven我们可以使用统一的规范方式下载jar包。
4)jar包版本不一致的风险
不同的项目在使用jar包的时候,有可能会导致各个项目的jar包版本不一致,导致未执行错误。
借助于Maven,所有的jar包都放在“仓库”中,所有的项目都使用仓库的一份jar包。
5)一个jar包依赖其他的jar包需要自己手动的加入到项目中
FileUpload组件->IO组件,commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。
极大的浪费了我们导入包的时间成本,也极大的增加了学习成本。
借助于Maven,它会自动的将依赖的jar包导入进来。
环境搭建
Mave下载
可以到Maven的官网下载。
个人建议将下载的压缩包解压到IntelliJ IDEA文件夹中的plugins子文件里,以便归类寻找。
该该根目录会有下面的文件夹apache-maven-3.6.3(具体版本看下载的文件)。
本地仓库配置
创建本地仓库
在你想要存储的地方创建文件夹repository表示本地仓库位置。(推荐D盘或者E盘,一般不选C盘)
配置本地仓库
打开Maven的安装目录中conf/ settings.xml文件(以记事本方式打开即可),在这里配置本地仓库:
这里的意思是配置本地仓库的目录为E:\Javarepository。
如果你不想下载jar包太慢或者下载失败的话你最好找到
<mirrors></mirrors>
这个标签,在里面加上
<!-- 阿里云镜像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- maven官方镜像 -->
<mirror>
<id>mirrorId</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name </name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- junit镜像地址 -->
<mirror>
<id>junit</id>
<name>junit Address/</name>
<url>http://jcenter.bintray.com/</url>
<mirrorOf>central</mirrorOf>
</mirror>
如下:
这样我们就可以优先重镜像仓库中下载!
总结
通过金昊霖大佬的博客和讲解,对Maven也有了个初步的认识,在往后的学习生活中也会融会贯通,这里就不写Maven的项目结构了,因为本人也不太了解,大家想要更加详细的了解Maven,请点击maven详解。
人生就是在不断地学习中前进,不气馁于一时的落后,找准目标,选对方向,加油干!古之立大事者,不惟有超世之才,亦必有坚韧不拔之志!以梦为马,不负韶华,岂能尽如人意,但求无愧己心!