共计 1466 个字符,预计需要花费 4 分钟才能阅读完成。
我们在前面介绍了 Maven 的 lifecycle,phase 和 goal:使用 Maven 构建项目就是执行 lifecycle,执行到指定的 phase 为止。每个 phase 会执行自己默认的一个或多个 goal。goal 是最小任务单元。
我们以 compile
这个 phase 为例,如果执行:
$ mvn compile
Maven 将执行 compile
这个 phase,这个 phase 会调用 compiler
插件执行关联的 compiler:compile
这个 goal。
实际上,执行每个 phase,都是通过某个插件(plugin)来执行的,Maven 本身其实并不知道如何执行 compile
,它只是负责找到对应的compiler
插件,然后执行默认的 compiler:compile
这个 goal 来完成编译。
所以,使用 Maven,实际上就是配置好需要使用的插件,然后通过 phase 调用它们。
Maven 已经内置了一些常用的标准插件:
插件名称 | 对应执行的 phase |
---|---|
clean | clean |
compiler | compile |
surefire | test |
jar | package |
如果标准插件无法满足需求,我们还可以使用自定义插件。使用自定义插件的时候,需要声明。例如,使用 maven-shade-plugin
可以创建一个可执行的 jar,要使用这个插件,需要在 pom.xml
中声明它:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
... 插件配置...
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
自定义插件往往需要一些配置,例如,maven-shade-plugin
需要指定 Java 程序的入口,它的配置是:
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.itranswarp.learnjava.Main</mainClass>
</transformer>
</transformers>
</configuration>
注意,Maven 自带的标准插件例如 compiler
是无需声明的,只有引入其它的插件才需要声明。
下面列举了一些常用的插件:
- maven-shade-plugin:打包所有依赖包并生成可执行 jar;
- cobertura-maven-plugin:生成单元测试覆盖率报告;
- findbugs-maven-plugin:对 Java 源码进行静态分析以找出潜在问题。
练习
使用 maven-shade-plugin 创建可执行 jar。
下载练习
小结
Maven 通过自定义插件可以执行项目构建时需要的额外功能,使用自定义插件必须在 pom.xml 中声明插件及配置;
插件会在某个 phase 被执行时执行;
插件的配置和用法需参考插件的官方文档。