聊一聊Maven


前言

前端时间被同事问到maven的相关知识时,才反应过来自己对经常打交道的maven其实也是半懂不懂的,为什么这么说呢?原因很简单,要说不熟吧,偏偏每天都有所接触;要说熟吧,可是对许多高级功能又仅是一知半解。所以写个博客来详细学习并记录一下


一、maven是什么?

引用官网上的解释是: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.
翻译过来大致意思就是 ApacheMaven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档。

相关名词解释:
GAV
GroupID:组织ID,一般写公司的名称缩写;
ArtifactID:当前Maven工程的项目名字;
Version:当前Maven工程的版本。

二、使用步骤

1.Maven的九种Lifecycle命令

clean:清除当前工程编译后生成的文件(即删除target整个目录);
validate:对工程进行基础验证,如工程结构、pom、资源文件等是否正确;
compile:对src/main/java目录下的源码进行编译(会生成target目录);
test:编译并执行src/test/java/目录下的所有测试用例;
package:将当前项目打包,普通项目打jar包,webapp项目打war包;
verify:验证工程所有代码、配置进行是否正确,如类中代码的语法检测等;
install:将当前工程打包,然后安装到本地仓库,别人可通过GAV导入;
site:生成项目的概述、源码测试覆盖率、开发者列表等站点文档(需要额外配置);
deploy:将当前工程对应的包,上传到远程仓库,提供给他人使用(私服会用)。

在这里插入图片描述
主要看default这套,该生命周期涵盖了构建过程中的检测、编译、测试、打包、验证、安装、部署每个阶段。注意一点:同一生命周期内,执行后面的命令,前面的所有命令会自动执行!

Maven中只定义了三套生命周期,以及每套周期会包含哪些阶段,而每个阶段具体执行的操作,这会交给插件去干,也就是说:Maven插件会实现生命周期中的每个阶段,这也是大家为什么看到IDEA的Lifecycle下面,还会有个Plugins的原因

在这里插入图片描述
当你双击Lifecycle中的某个生命周期阶段,实际会调用Plugins中对应的插件。在Shell窗口执行mvn命令时,亦是如此,因为插件对应的实现包,都会以jar包形式存储在本地仓库里。

2.打包跳过test

当大家要做项目发版时,就需要对整个聚合工程的每个工程打包(jar或war包),此时可以直接双击工程里的package命令,但test命令在package之前,按照之前聊的生命周期原则,就会先执行test,再进行打包。
test阶段,会去找到所有子工程的src/test/java目录,并执行里面的测试用例,如果其中任何一个报错,就无法完成打包工作。而且就算不报错,执行所有测试用例也会特别耗时,这时该怎么办呢?可以选择跳过test阶段,在IDEA工具里的操作如下:

在这里插入图片描述
先选中test命令,接着点击上面的闪电图标,这时test就会画上横线,表示该阶段会跳过。

三、Maven生命周期

Maven 生命周期是为了对所有的构建过程进行抽象和统一,开发了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。
Maven 生命周期本身不做任何实际的工作,实际的任务都交给插件来完成。这样的设计,既保证了 Maven 整体框架的轻便,也最大程度的扩展性。
Maven 生命周期抽象了构建的各个步骤,明确了它们的逻辑次序,但没有提供具体的实现,通过插件来完成实际的工作,每个构建步骤都可以绑定一个或者多个插件行为。为了让 Maven 开箱即用,Maven 为大多数构建步骤编写并绑定了默认插件。比如针对编译的插件有 maven-compiler-plugin,针对测试的插件有 maven-surefire-plugin 等。

生命周期步骤
在 Maven 中,有三套相互独立的生命周期,分别是 clean、default 和 site。

clean:clean 生命周期的目的是清理项目;
default:default 生命周期的目的是构建项目;
site:site 生命周期的目的是建立项目站点;

每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。以 clean 生命周期为例,它包含的阶段有 pre-clean、clean和 post-clean:

当我们调用 pre-clean 的时候,只有 pre-clean 阶段执行;
当我们调用clean 的时候,pre-clean 和 clean阶段会按顺序执行;
当我们调用 post-clean 的时候,pre-clean、clean和 post-clean 都会按顺序执行;

和生命周期阶段的前后依赖关系相比,clean、default 和 site 这三套生命周期本身是相互独立的,我们可以仅仅调用 clean 生命周期的某个阶段,或者仅仅调用 default 生命周期的某个阶段,而不会对其它生命周期产生任何影响。
在这里插入图片描述

四、Maven私服搭建

大家来设想这么个场景,假设你身在基建团队,主要负责研发各个业务开发组的公用组件,那么当你写完一个组件后,为了能让别的业务开发组用上,难道是先把代码打包,接着用U盘拷出来,给别人送过去嘛?有人说不至于,难道我不会直接发过去啊……
的确,用通讯软件发过去也行,但问题依旧在,假设你的组件升级了,又发一遍吗?所以,为了便于团队协作,搭建一个远程仓库很有必要,写完公用代码后,直接发布到远程仓库,别人需要用到时,直接从远程仓库拉取即可,而你升级组件后,只需要再发布一个新版本即可!


总结

关于Maven的就先讲到这里吧,写着写着就突然不是很想写了hhhhhh (ps:好吧,是因为理解还不太深,等后续理解更深了在更新),唯一想说的是Maven的功能远不仅如此,希望大家一起探索吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值