Maven的设计哲学是Convention over configuration(惯例先于配置),在本文中,你将会了解到如下的五个技术细节,这些内容我在最近的面试中也会去问候选人:
maven clean package、install、deploy的区别
maven的生命周期
maven常用插件
maven结合Gitlab Runner执行CI/CD单元测试
maven依赖排除
一、maven clean package、install、deploy的区别
一表胜千言、生命周期表
功能表
如果用mvn install后,新改的内容不生效,一定要后来使用mvn clean install 才生效
插件说明:
maven-war-plugin将工程打包成war,maven-jar-plugin将工程打包成jar
而maven-install-plugin会将打好的war包放入本地开发环境的maven版本库中。
二、Maven生命周期
Maven的生命周期就是对所有构建过程抽象与统一,包含项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎所有的过程(可以简化为编译->测试->打包->部署)。几乎所有项目的构建,都能映射到这样一个生命周期上。
Maven有三套相互独立的生命周期,分别是clean(清理项目)、default(构建项目)和site(建立项目站点),用户可以分别仅仅调用clean生命周期的每个阶段。
(一)clean生命周期
此周期的目的是清理项目,它包含三个阶段:
(1)pre-clean:执行一些需要在clean之前完成的工作
(2)clean:移除所有上一次构建生成的文件
(3)post-clean:执行一些需要在clean之后立刻完成的工作
(二)default生命周期
最核心的生命周期,构建的核心部分,编译,测试,打包,部署等等。它包含的阶段如下:
初始化、编译、测试、打包、集成测试、验证、部署
1) validate 验证项目是否正确和所有需要的相关资源是否可用
2) initialize 初始化构建
3) generate-sources
4) process-sources 处理源代码
5) generate-resources
6) process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
7) compile 编译项目的主源代码
8) process-classes
9) generate-test-sources
10) process-test-sources 处理项目测试资源文件
11)generate-test-resources
12) process-test-resources 处理测试的资源文件
13)test-compile 编译项目的测试代码
14)process-test-classes
15) test 使用单元测试框架运行测试,测试代码不会被打包或部署
16)prepare-package 做好打包的准备
17)package 接受编译好的代码,打包成可发布的格式
18) pre-integration-test
19) integration-test
20) postintegration-test
21) verify
22) install 将包安装到Maven本地仓库,供本地其他Maven项目使用
23)deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
(三)site生命周期
site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
1)pre-site 执行一些在生成项目站点之前需要完成的工作
2)site 生成项目站点文档
3)post-site 执行一些在生成项目站点之后需要完成的工作
4)site-deploy 将生成的项目站点发布到服务器上
三、Maven常用插件
clean插件maven-clean-plugin
resources插件maven-resources-plugin
compile插件maven-compiler-plugin
单元测试插件maven-surefire-plugin
打包插件maven-jar-plugin、maven-war-plugin、maven-assembly-plugin、maven-shade-plugin
发布插件maven-install-plugin
四、maven结合Gitlab Runner执行CI/CD单元测试
Gitlab 除了基本的版本管理功能之外,还有持续集成能力,在项目根目录中编写一段 .gitlab-ci.yml,就能让 Gitlab 按照其中的指示完成持续集成的工作。
Gitlab CI/CD 是 Gitlab 的组件,它利用 Gitlab Runner 来执行具体的构建任务。
具体创建Maven 的 Runner的方式可以参照这篇文章:使用 Maven 运行单元测试