一、maven 可用插件信息
二、maven3个内置生命周期
每个生命周期相互独立,且包含若干阶段。
- clean
- default(build)
- site
三、3个生命周期包含的阶段
每个阶段相当于一个接口,具体的实现由插件来实现。
1、clean
- pre-clean执行一些清理前需要完成的工作。
- clean清理上一次构建生成的文件。
- post-clean执行一些清理后需要完成的工作。
2、 default
default 生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分。
- validate
- initialize
- generate-sources
- process-sources 处理项目主资源文件。一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
- generate-resources
- process-resources
- compile 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath目录中。
- process-classes
- generate-test-sources
- process-test-sources处理项目测试资源文件。一般来说,是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。
- generate-test-resources
- process-test-resources
- test-compile编译项目的测试代码。一般来说,是编译src/test/java目录下的Java文件至项目输出的测试classpath目录中。
- process-test-classes
- test 使用单元测试框架运行测试,测试代码不会被打包或部署。
- prepare-package
- package接受编译好的代码,打包成可发布的格式,如JAR。
- pre-integration-test
- integration-test
- post-integration-test
- verify
- install 将包安装到Maven本地仓库,供本地其他Maven项目使用。
- deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
site
site生命周期目的是建立和发布站点,maven能够基于pom配置自动生成一个简单站点,主要包括以下阶段:
- pre-size 执行在站点生成之前的准备工作;
- site 生成项目站点文档;
- post-site 执行一些在生成项目站点之后需要完成的工作;
- site-deploy 将生成的项目站点发布到服务器上
总结:生命周期:阶段=1:n,阶段:插件=1:1,插件:插件目标=1:n,阶段:插件目标=1:n ,也就是多生命周期,阶段都是抽象,具体的体现在插件的目标
四、maven 插件与绑定阶段
maven 为了更好的体验,默认内置几个插件,让用户在无感情况下完成项目的构建。
1、maven内置插件与绑定阶段
| 插件 | 功能 | 绑定阶段 |
|---|---|---|
| maven-clean-plugin | 清理上一次执行创建的目标文件 | clean |
| maven-resources-plugin | 处理源资源文件和测试资源文件 | resources,testResources |
| maven-compiler-plugin | 编译源文件和测试源文件 | compile,testCompile |
| maven-surefire-plugin | 执行测试文件 | test |
| maven-jar-plugin | 创建jar | jar |
| maven-install-plugin | 安装 jar,默认将创建生成的 jar 拷贝到 .m2/repository 下面 | install |
| maven-deploy-plugin | 发布jar 到maven仓库,例如公司的私服 | deploy |
2、maven插件目标调用方式
插件是实现,目标是插件的具体体现,所以目标是我们关心的核心点。
- 默认绑定
maven 默认将生命周期的若干阶段绑定了某些插件的目标,注意某些。即,阶段:目标=1:n,这里的n是可以包含0或大于1。
例如:mvn clean (默认将clean这个生命周期的clean阶段绑定到了maven-clean-plugin插件的clean目标),这里需要说明下
maven-clean-plugin 只有一个目标,其他插件可能拥有n个目标,具体需要到maven官网 上查看。相同的,mvn package,mvn install 也是一样。 - 指定调用
我们知道maven官方的插件,一般是这样的模式,artifactId 为 maven-archetype-plugin ,我们可以使用 mvn archetype:goal-name 命令的形式来调用具体的插件目标。
说明:mvn xx:goal-name 中的xx以为是archetype按道理是不太准确,它应该是插件的唯一描述groupId:artifactId(前缀),但是在maven的官方上一般以archetype为插件的前缀。 我们也可以在引用插件的地方,用configuration 配置它的前缀:
1 | <project> |
这样我们可以使用 mvn customPrefix:goal 来调用compile插件的某个目标了。
五、推荐几个有用小插件
1、maven–dependency-plugin
这个插件有很多的目标,详情可见官方定义,我常用的:
- dependency:analyze 分析这个项目的依赖关系,并确定哪些是声明了且使用了,声明没使用等(不是很准确,特别在配置文件里面使用了依赖时候)作为大致分析。
- dependency:copy 将依赖和source 分离,例如:springBoot 中Fatjar问题解决.
- dependency :tree 显示该项目的依赖关系树。
2、maven-assembly-plugin
这个插件在项目制作分发包时候使用,需要定义assembly.xml的元数据文件来表述打包。你可以这么理解,当需要一个压缩文件,包含项目的jar包,源代码,执行脚本等其他,就可以用它来指定这个文件,支持zip,tar.gz jar war 等格式。
3、maven-help-plugin
它是个maven提供的一个很有用的工具,可以帮助我们分析了解当前生效的profiles,pom,settings 文件和查询某个插件信息。例如
- 当前生效pom
mvn help:effective-pom - 当前生效的settings
mvn help:effective-settings - 查询插件详情(用法和包含几个目标)
mvn help:describe -Dplugin=插件的前缀 -Ddetail