什么是Maven插件?
Maven实际上是一个插件执行框架,Maven中的所有任务都是由插件完成的。
Maven插件是构建目标的集合,也称为MOJO (Maven Old Java Object)。可以把插件理解为一个类,而构建目标是类中的方法。构建阶段包含一系列的构建目标,可以理解为按顺序调用各个插件中的构建目标(方法),然后一系列的构建阶段组成一个构建生命周期。
构建目标可以绑定到多个构建阶段,也可以不绑定,就像类的方法可以被调用,也可以不被调用。
插件示例:
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven.failsafe.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
这是一个故障安全插件的简单配置,负责运行集成测试。可以看到,插件有两个主要目标:
integration-test
: 运行集成测试verify
: 验证所有通过的集成测试
我们可以使用下面的命令列出一个特定插件的所有目标:
mvn <PLUGIN>:help
例如,要列出故障安全插件中的所有目标:
mvn failsafe:help
输出:
...
Maven Failsafe MOJO in maven-failsafe-plugin.
This plugin has 3 goals:
failsafe:help
Display help information on maven-failsafe-plugin.
Call mvn failsafe:help -Ddetail=true -Dgoal=<goal-name> to display parameter
details.
failsafe:integration-test
Run integration tests using Surefire.
failsafe:verify
Verify integration tests ran using Surefire.
...
可以看到插件包含3个目标。
要执行一个特定的构建目标,不执行它的整个阶段(和前面的阶段),可以使用以下命令:
mvn [plugin-name]:[goal-name]
例如,可以使用maven-compiler-plugin的编译目标来编译Java项目,运行以下命令:
mvn compiler:compile
插件类型
Maven 提供了下面两种类型的插件:
类型 | 描述 |
---|---|
Build plugins | 在构建时执行,并在 pom.xml 的 元素中配置。 |
Reporting plugins | 在网站生成过程中执行,并在 pom.xml 的 元素中配置。 |
下面是一些常用插件的列表:
插件 | 描述 |
---|---|
clean | 构建之后清理目标文件。删除目标目录。 |
compiler | 编译 Java 源文件。 |
surefile | 运行 JUnit 单元测试。创建测试报告。 |
jar | 从当前工程中构建 JAR 文件。 |
war | 从当前工程中构建 WAR 文件。 |
javadoc | 为工程生成 Javadoc。 |
antrun | 从构建过程的任意一个阶段中运行一个 ant 任务的集合。 |
自定义插件
如果maven内置插件不能满足项目需求,也可以开发自定义插件。
https://maven.apache.org/guides/plugin/guide-java-plugin-development.html
maven——添加插件和添加依赖有什么区别?
依赖:运行时开发时都需要用到的jar包,比如项目中需要一个Json的jar包,就要添加一个依赖,这个依赖在项目运行时也需要,因此在项目打包时需要把这些依赖也打包进项目里;
插件:在项目开的发时需要,但是在项目运行时不需要,因此在项目开发完成后不需要把插件打包进项目中,比如有个可以自动生成getter和setter的插件,嗯对~这就是插件了,因为这玩意在编译时生成getter和setter,编译结束后就没用了,所以项目打包时并不需要把插件放进去~