1.了解Maven插件的基本工作原理
生命周期和插件二者是密不可分的,生命周期代表项目构建的阶段,而实际的操作都是插件来完成的。
详细的说一下:
Maven的核心并不执行任何具体的构建任务,所有 这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的。进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标。
例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的主源码,test-Compile目标用来编译位于src/test/java/目录下的测试源码。
2.用户可以通过两种方式调用Maven插件目标。
第一种方式是将插件目标与生命周期阶段(lifecycle phase)绑定,这样用户在命令行只是输入生命周期阶段而已,例如Maven默认将maven-compiler-plugin的compile目标与 compile生命周期阶段绑定,因此命令mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标。
第二种方式是直接在命令行指定要执行的插件目标,例如mvn archetype:generate 就表示调用maven-archetype-plugin的generate目标,这种带冒号的调用方式与生命周期无关。
3.阶段(Phase)、插件(plugin)、目标(goal)之前的关系
(一)关系总结:
1、Maven生命周期中的构建阶段与插件相互绑定
2、一个Maven插件可以包含多个目标
3、每个目标会执行一个特定的任务(task)
4、Maven生命周期的阶段(phase)和插件的目标(target)相互绑定
例如:我要编译一个项目,需要进行的是Maven默认生命周期(default lifecycle)的编译阶段(compile),需要用到的插件是maven-compiler-plugin,可是maven-compiler-plugin插件中有很多功能(也就是目标,比如这个插件可以compile、test-compile等),但我们只需要执行编译主程序,就执行compiler:compile。
(二)直接运行插件
可使用“插件名:目标名”的参数形式直接运行某插件的某目标。
mvn dependency:copy-dependencies
以上命令执行了dependency插件的copy-dependencies目标。
(三)阶段(phase)和插件目标(goal)可以同时使用
mvn clean dependency:copy-dependencies package
以上命令执行了clean周期的pre-clean和clean阶段,dependency插件的copy-dependencies目标,default周期package阶段及package之前的所有阶段。
mvn clean install site
直接运行三套生命周期
(四)执行Maven 的install,看插件和目标的效果
4. maven插件的位置
[本地仓库位置]repository\org\apache\maven\plugins
Maven下载的插件都在这里边了
是不是看到这些插件很熟悉,很多是关于Maven的默认生命周期中各阶段需要的插件。
5.Maven官方有两个插件列表
第一个列 表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html
第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html
Tips:关于Maven生命周期的阶段(phase)和插件的目标(target)相互绑定以后用到在总结。
参考
https://www.infoq.cn/article/2011/04/xxb-maven-7-plugin/
https://blog.csdn.net/just4you/article/details/74225386