概念模型
根据官网定义,maven分为固定三个大类的生命周期,简单理解maven构建过程就是通过mvn
来逐步执行生命周期的过程.
lifecycle由phase
构成,简单来说phase
才是maven固定的执行逻辑,每个phase
会执行绑定在其上的goal
,而goal
则是由plugin
实现的
¶生命周期lifecycle
- Clean Lifecycle
- Default Lifecycle
- Site LifeCycle
maven默认会在各个phase
中绑定不同的插件,并且执行默认的goal
,mvn:phase
命令会执行当前生命周期中的之前的phase,
例如:mvn install
会导致
¶插件plugin
maven本身开发并没有含有功能,只有当用户指定了plugin,由maven执行过程中调用plugin来处理对应的phase
,因此maven编译后并不大
maven中插件实际上就是按照maven标准开发的jar,每个plugin
包含了若干个goal
,只有当其绑定到phase
中时,在执行生命周期
命令时才会被调用
- mvn命令:
- mvn phase :会触发改
pahse
所在的生命周期之前并且包含自身的pahse
- mnv plugin:goal :用来调用对应插件的的
goal
,其中plugin部分表现为gourpId:artifact:version:goal
- mvn phase :会触发改
- 缩减调用插件goal命令
当调用maven默认的插件如mvn clean:clean
,即调用org.apache.maven.plugins:maven-clean-plugin: clean
可以简写,原因是maven源码
启动的时候会自动寻找groupId为[org.apache.maven.plugins, org.codehaus.mojo]
,并且artifact
为maven-[pluginName]-plugin
的依赖并调用 - 自定义maven插件的命名方式
artifact
一般命名为pluginname-maven-plugin
groupId
随意,如果想要使用maven原生插件一样,则需要主动在user/setting.xml
中添加,参考插件命名1
2
3<pluginGroups>
<pluginGroup>sample.plugin</pluginGroup>
</pluginGroups>
¶常见插件
官方插件可以去看jar包结构,一般都存在一个plugin.xml
描述了该插件的mojo信息,
同时使用mvn plugin:help -Ddetail=ture -Dgoal=xx
可以显示该goal的参数信息
¶clean插件
¶功能
默认删除project.build.directory
,project.build.outputDirectory
,project.build.testOutputDirectory
,project.reporting.outputDirectory
- 删除额外的文件
1 | <build> |
- 跳过clean阶段
maven中一些去其他的插件也是如此跳过的,如负责执行JUnit 的surefire
插件
1 | <configuration> |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客!
评论