点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
看到题目有人就会说了,Maven谁不会啊?而且Maven还有要被淘汰的趋势,最近Gradle很火热,大有取代Maven的势头,移动端几乎已经是Gradle的天下了;
不过我想说,会这种概念太过于宽泛,精通叫会,会一点也叫会,各种水平的人,尤其是一瓶子不满半瓶子晃荡的人都说自己会,而不具体说自己掌握到什么程度其实是对自己不负责任;
就算对Maven真的一无所知,网上的学习资料,包括文章、视频等等,一抓一大把,什么安装、配置之类的顶多半天就可以搞定;
学习一项技术,不能只是浮于表面,不是说绝对不行,就像开车,我们不懂汽车的原理一样也能开,之所以我们不去深究汽车为啥能跑是因为我们不是司机,更不是修车师傅,作为一个业余的能够让汽车成为自己的代步工具就好,可是对待技术就不能还是这个不求甚解的态度了,必须深入下去;
为什么要学Maven
Maven作为一个强大的跨平台项目管理工具,和spring框架的作用一样减轻了很多开发的痛苦,Maven的官方解释是主要服务于基于java平台的项目构建、依赖管理和项目信息管理;
翻译成人话那就是你做Java开发需要的项目Maven都给你打包好了,我用一个做饭的例子来说明一下Maven有多强大;
我是个不怎么会做饭的人,也就会几样大家都会的家常菜,如果我想吃大餐还懒得去饭店的话就得自己动手做,如果我想吃酸菜鱼(好像也不算大餐,就当这是大餐吧),我根本就啥也不会,那怎么办?
这时候我上网搜教程,我照着网上的教程一步步做,结果因为我是个新手老出错,最后耗费了很长时间做的也不怎么成功;
我吃着不怎么口味差强人意的鱼想着,如果有人把一个已经放好所有的调料的半成品给我,再给我个简明扼要的步骤,让我这个小白也能做出美味的酸菜鱼该多好;
然后有那么一天,我从网上看到如同速冻饺子一样的酸菜鱼,我兴奋的下单,把半成品的鱼放到锅里,照着商家给的步骤做出了还挺好吃的酸菜鱼;
做酸菜鱼就好比我们开发大型的项目,做鱼需要的调料等等就好比是jar包之类的,如果我们只是自己做,就需要自己去测试哪个Jar包用在什么地方合适,以及自己测试bug之类的,整个过程比较麻烦,而Maven就好比我刚才提到的速成型做法,把需要的调料之类全部打包到一起,到时候直接用就行了;
也许这个例子举得不太恰当,Maven的作用就在于整合了项目资源,整合在计算机中非常常见,无论是软件还是硬件,比如类在一定程度上是函数的整合,集成电路是晶体管的整合……
把所有要用到的东西整合在一起,而不是跟在淘宝购物似的满世界找自己所需的资源这是提升效率的极佳的方式!
Maven都解决了那些痛点?
项目的自动化构建
这里的构建主要指的是编译、测试、打包 、安装和部署等工作,这些不是程序员不能手动解决的,而是麻烦,项目少了还好,多了那可就累了,就拿编译来说吧,javac一次只能编译一个文件,而用Maven可以一次编译一批;
而且手动做这些不仅耗费时间长,还容易出错(结合我刚才举的酸菜鱼的例子);计算机最擅长的事情之一就是做重复的事情,把这些机械性的工作交给计算机,既可以解放人力,又可以提升效率。
管理依赖
这里的依赖不要理解为动词,这里的依赖是一个名词,指的是项目需要使用的其他资源,最常见的就是各种jar包,管理依赖的本质就是管理项目中很使用的各种jar包。
Maven中的概念
我们平时用的很多都是属于概念在中的内容,也是Maven最重要也是我们最应该掌握的内容,至于安装等步骤我直接省略,这个就算不会网上有的是教程,顶多半天就能搞定的事情我就不放在这里说了;
目录结构
Maven的目录结构就跟化学元素符号等是约定下来统一使用的的,个人是不能随意更改的; 一般的,一个Maven项目就是一个文件夹,这是一般结构
一个并不见得每个人都知道的事情是:Maven是可以独立使用的,只不过我们通常都是用IDEA开发项目,都是IDEA和Maven结合起来使用
单独使用其实也不难,随便找一个盘新建好所有的目录之后(参照上面给出的目录结构),用Editplus来新建一个程序,注意,千万不用使用记事本,那家伙连语法高亮都没有,我们通常说的用记事本敲代码都是指的Editplus、notepad等这类软件而不是文本文档,切记!
在Editplus中敲以下代码(算是个模板,夹杂着伪代码,明白意思就好)
写完之后另存为,文件名要与类名保持一致,同时按照所有文件进行存储;
编译文件直接用命令就好,打开DOS命令行(win+R输入cmd),定位到相应的目录后cd 路径名,输入“mvn compile”,如果是第一次用,会有三五分钟的下载资源的时间(这是最快的时间,如果网络不好的话三五十分钟也有可能,所以说网络是非常重要滴);
编译成功之后src文件夹旁边会多了一个target文件夹;target文件夹下有三个子文件夹,分别是classes、generated-sources和maven-status,其中classes存放的是编译后的类文件;
定位到classes后执行,DOS命令:java 包名.类名
POM
中文名叫做:项目对象模型,Maven都是吧java项目抽象成一个模型,在pom.xml文件中进行控制,可以说跟Maven打交道就是跟pom.xml打交道;
POM.XML文件中都有什么呢?内容可多了,我直接分块进行说明(写得不太全面,只是个大致的框架)
坐标
来自数学的三维坐标,groupId、artifactId、version这三个值确定互联网上唯一的资源;
在Maven中,每个资源都有唯一的坐标,简称gav;
groupId:组织代码,标识一个单位的名称,写法跟包名一致,域名的反序;
artifactId:项目名称;
version:项目的版本号,通常用数字来标识,如果项目还在开发中需要在后面加上“-SNAPSHOT” 快照;
gav的使用:
第一:每个Maven项目都必须有一个自己的gav;
第二:管理依赖时也需要其他的jar包,这时候也需要用到gav作为唯一标识;
依赖
依赖的使用除了用到表示自愿的gav,还需要用到dependency,要注意一点的是,在pom.xml文件中使用的是dependency的复数形式dependencies,因为依赖不可能只有一个;
这是代码示例,我只写代码,具体的数据我就不写了:
其中
是不唯一的,可以有很多很多个,一般情况下日志和数据驱动是标配;
用于标识打包的类型的是packaging,一般是打包成jar
仓库
仓库,顾名思义就是放东西的,我学习数据库的时候老师说,数据库没什么复杂的,就是个存放数据的仓库而已
那么,Maven的仓库存放的都是什么呢?经过之前的学习,我想应该也能猜个大概,那就是jar包;
Maven仓库主要构成是:
第一:Maven自带的jar包;
第二:第三方工具的jar包;
第三:自己写的jar包
Maven主要分以下几类:
第一种:本地仓库,也叫本级仓库,默认路径是你登录操作系统的账号的目录中 如果要修改就要修改Maven的配置文件,具体步骤如下:
第一步:创建一个目录,作为仓库使用,注意名称中不要有汉字和空格;
第二步:修改setting.xml文件,指定刚才新建的文件路径
第三步:把仓库的资源复制粘贴到刚才新建的文件中;
第二种:远程仓库,需要联网才能使用的仓库;
Maven的工作方式:一般先找自己的项目,如果没有再找本地仓库,本地仓库没有就找私服(一般是自己公司的Maven服务器),如果私服还没有的话,就找远程仓库,从小到大,逐级访问;
Maven的生命周期和插件
生命周期很简单,换句话说就是项目构建的各个阶段,包括清理、编译、测试、报告、打包、安装和部署;
重点在于插件,就如同设计模式中的模板一样,Maven生命周期是个抽象的概念,它本身不作任何工作,所有的事情都是有插件来完成;
具体的工作原理是:Maven为每个构建步骤都绑定了至少一个插件,用户可以通过配置插件来定制构建,也可以自己写插件,插件通常都是jar包;
测试
这里的测试通常是指的单元测试,junit,我在学习Java的时候,因为都是分模块学的,每次写的代码都很少,手写各种框架的代码算是巨无霸了,但是做测试用main妥妥够用了,但是项目多了可就不行了,Maven另一个方便之处就是批量测试;
这里的单元是指的应函数,Maven把一个函数视为一个单元,
使用单元测试也很简单:
第一步:加入junit依赖
第二步:在src\test\java目录中创建测试文件,并写测试代码
清理
mvn clean :删除以前生成的数据和target文件
结束了
这就是Maven大名鼎鼎的八大核心概念,我们每天都会用到Maven,这些概念每天都为我们服务然而我们却感知不到他们的存在,他们给我们带来的便利是润物细无声的,了解了核心概念,也就是Maven工作的原理,我们就会对Maven的应用更加的灵活。
作者简介:笔名立体的萌,是个工作还不到一年就辞职考研的的菜鸟,上学学习的是java,但是工作用的是C#,C#用途远远没有java范围广,再加上java是我的母语,所以很像回归java,不仅仅是提升技术能力,也有往大数据等高端领域发展的想法。