Maven项目构建基本结构
当我们构建一个maven项目时,如mvn clean install,会根据maven lifecycle(生命周期)以及传入的phase(阶段)或goal(目标)对项目进行编译打包。
lifecycle,phase和goal的基本关系如下图
maven生命周期
maven项目中内置了三个常用的lifecycle
| 生命周期(lifecycle) | 描述 |
|---|---|
| default | 构建的核心部分,进行项目的编译,测试,打包,部署等 |
| clean | 项目构建之前对项目进行一些基本的清理工作 |
| site | 生成项目报告,站点等 |
default生命周期
| 阶段(phase) | 描述 |
|---|---|
| validate | 验证项目是否正确以及一些必须信息是否齐全 |
| compile | 编译项目代码 |
| test | 使用测试框架对测试用例进行测试 |
| package | 使用编译的文件对项目进行打包 |
| verify | 与其他系统进行集成测试 |
| install | 将打包好的package安装到本地仓库 |
| deploy | 将打包好的package拷贝到远程仓库 |
clean生命周期
| 阶段(phase) | 描述 |
|---|---|
| pre-clean | 做清理之前的一些工作 |
| clean | 清除之前build生成的文件 |
| post-clean | 做一些后续的清理工作 |
site生命周期
| 阶段(phase) | 描述 |
|---|---|
| pre-site | 做生成站点文档之前的一些工作 |
| site | 生成站点文档 |
| post-site | 站点文档生成之后做一些其他必须的工作 |
| deploy-site | 将站点文档部署到远程服务器 |
阶段phase
对于部分阶段(phase),我们对其绑定了某些目标(goal),但我们调用相应的阶段时,会执行相应的目标。阶段与目标自动绑定关系如下表
1.clean生命周期相关
| 阶段(phase) | 绑定目标(plugin:goal) |
|---|---|
| clean | clean:clean |
2.default生命周期相关
a.打包类型为ejb / ejb3 / jar / par / rar / war
| 阶段(phase) | 绑定目标(plugin:goal) |
|---|---|
| process-resources | resources:resources |
| compile | compiler:compile |
| process-test-resources | resources:testResources |
| test-compile | compiler:testCompile |
| test | surefire:test |
| package | ejb:ejb or ejb3:ejb3 or jar:jar or par:par or rar:rar or war:war |
| install | install:install |
| deploy | deploy:deploy |
b.打包类型为ear
| 阶段(phase) | 绑定目标(plugin:goal) |
|---|---|
| generate-resources | ear:generate-application-xml |
| process-resources | resources:resources |
| package | ear:ear |
| install | install:install |
| deploy | deploy:deploy |
c.打包类型为pom
| 阶段(phase) | 绑定目标(plugin:goal) |
|---|---|
| package | |
| install | install:install |
| deploy | deploy:deploy |
3.site生命周期
| 阶段(phase) | 绑定目标(plugin:goal) |
|---|---|
| site | site:site |
| site-deploy | site:deploy |
goal
goal是真正执行任务的地方,从代码层面上来说就是每个goal即对应一个对于AbstractMojo类的实现类。而不同的plugin中可以定义1个或多个AbstractMojo类的实现类,即一个plugin可对应1个或多个goal。
具体关系可见下图
插件( plugin)
通过上图我们知道一个plugin即我们对应的一个maven相关的jar包,而每个plugin中包含了一个或多个目标(goal),每个目标(goal)即为一个对于AbstractMojo的实现类.
maven构建命令
当我们通过mvn --help获取帮助时,我们发现mvn的用法为mvn [goals] [phases],即我们可以通过指定phase来执行生命周期(lifecycle中指定phase之前的所有phase,即如果我们指定phase install,则会执行validate, compiler, test, package,verify和install所有的阶段(phase)),如果指定某个一个或多个目标(goal),就会一个一个的执行相应的目标(goal)