第五章节的知识分为三个部分,第一部分介绍插件的基础,第二部分介绍内置的插件,例如clean,compiler,resource,jar等等。第三部分介绍如何自定义插件。本篇介绍插件基础。它包含以下四块
- 引入插件
- 执行插件
- 配置插件的仓库
- 插件的extension属性
1、引入插件
项目引入插件是通过在pom.xml中定义build | plugins | plugin标签。例如source插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>版本号</version> <configuration> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <finalName>${project.name}-jar</finalName> </configuration> </plugin>
当plugin的groupId为org.apache.maven.plugins,org.codehaus.mojo时,可以忽略不写。
在setting.xml中定义pluginGroups | pluginGroup标签下的插件,不必填写groupId。
除上述两种情况之外,任意其他的插件组都需要填写。
在实际情况中,即使pom.xml未定义任何插件,它会从父pom,祖父pom等祖先pom中继承而来,它的根为super pom。
执行mvn help:effective-pom可以查看最终生效的pom。项目引入的插件在其中都可以找到。
pluginManagement中定义的插件是从祖先Pom,super pom中继承而来的。
2、执行插件
执行插件的方式有两种。
第一种方式的格式为mvn lifecycle:phase,其中lifecycle的含义为生命周期,是clean,default, site;可以省略。phase是生命周期拥有的phase。当调用命令之后,实际运行的还是与phase关联的goal的代码,若没有goal,不会有任何输出。
第二种方式的格式为mvn pluginName:goal,pluginName由groupId, artifactId, name组成,其中groupId为插件所在的组,artifactId为插件在组中的标识,name为插件项目的名称;groupId,artifactId可以省略。
3、插件仓库
插件仓库属于通用的,通常不需要在每个项目的Pom.xml都定义一次,可以继承自父pom或super pom,默认的插件仓库定义在super pom中,可以在maven-model-builder-version.jar中找到。
插件仓库的语法格式在第二章节的仓库地址部分已介绍,此处不再赘余。
4、extension属性
引用原著中的叙述:
If you associate a plugin with your project, which introduces a new packaging type or a customized lifecycle, then you must set the value of the extensions configuration element to true。
引入的插件定义了新的一种打包类型(默认是jar),或重新配置生命周期,这种情况下必须设置extensions属性为true,最常见的是将项目打包成war,即定义了一种新的打包类型