使用插件


我们在前面介绍了Maven的lifecycle,phase和goal:使用Maven构建项目就是执行lifecycle,执行到指定的phase为止。每个phase会执行自己默认的一个或多个goal。goal是最小任务单元。

我们以compile这个phase为例,如果执行:

  1. mvn compile

Maven将执行compile这个phase,这个phase会调用compiler插件执行关联的compiler:compile这个goal。

实际上,执行每个phase,都是通过某个插件(plugin)来执行的,Maven本身其实并不知道如何执行compile,它只是负责找到对应的compiler插件,然后执行默认的compiler:compile这个goal来完成编译。

所以,使用Maven,实际上就是配置好需要使用的插件,然后通过phase调用它们。

Maven已经内置了一些常用的标准插件:

插件名称对应执行的phase
cleanclean
compilercompile
surefiretest
jarpackage

如果标准插件无法满足需求,我们还可以使用自定义插件。使用自定义插件的时候,需要声明。例如,使用maven-shade-plugin可以创建一个可执行的jar,要使用这个插件,需要在pom.xml中声明它:

  1. <project>
  2. ...
  3. <build>
  4. <plugins>
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-shade-plugin</artifactId>
  8. <version>3.2.1</version>
  9. <executions>
  10. <execution>
  11. <phase>package</phase>
  12. <goals>
  13. <goal>shade</goal>
  14. </goals>
  15. <configuration>
  16. ...
  17. </configuration>
  18. </execution>
  19. </executions>
  20. </plugin>
  21. </plugins>
  22. </build>
  23. </project>

自定义插件往往需要一些配置,例如,maven-shade-plugin需要指定Java程序的入口,它的配置是:

  1. <configuration>
  2. <transformers>
  3. <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
  4. <mainClass>com.itranswarp.learnjava.Main</mainClass>
  5. </transformer>
  6. </transformers>
  7. </configuration>

注意,Maven自带的标准插件例如compiler是无需声明的,只有引入其它的插件才需要声明。

下面列举了一些常用的插件:

  • maven-shade-plugin:打包所有依赖包并生成可执行jar;
  • cobertura-maven-plugin:生成单元测试覆盖率报告;
  • findbugs-maven-plugin:对Java源码进行静态分析以找出潜在问题。

练习

使用插件 - 图1下载练习:使用maven-shade-plugin创建可执行jar (推荐使用IDE练习插件快速下载)

小结

Maven通过自定义插件可以执行项目构建时需要的额外功能,使用自定义插件必须在pom.xml中声明插件及配置;

插件会在某个phase被执行时执行;

插件的配置和用法需参考插件的官方文档。

读后有收获可以支付宝请作者喝咖啡:

使用插件 - 图2