Maven 插件讲解

一、maven 可用插件信息

  • Apache(官方,稳定)

二、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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<project>
...
<build>
...
<plugins>
...
<plugin>
<artifactId>maven-compile-plugin</artifactId>
<version>2.3</version>
<configuration>
...
<goalPrefix>customPrefix</goalPrefix>
</configuration>
</plugin>
</plugins>
</build>
</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