Maven插件怎么用?Maven插件配置和开发详解
Maven 插件是扩展 Maven 功能的可执行组件每个插件包含一个或多个目标(goals)用于执行特定任务如编译、测试、打包等。插件与生命周期的关系生命周期Lifecycle定义构建阶段phase的顺序插件Plugin提供具体实现goal来完成这些阶段的任务Maven 有以下三个标准的生命周期clean项目清理的处理default(或 build)项目部署的处理site项目站点文档创建的处理每个生命周期中都包含着一系列的阶段(phase)。这些 phase 就相当于 Maven 提供的统一的接口然后这些 phase 的实现由 Maven 的插件来完成。我们在输入 mvn 命令的时候 比如 mvn cleanclean 对应的就是 Clean 生命周期中的 clean 阶段。但是 clean 的具体操作是由maven-clean-plugin来实现的。所以说 Maven 生命周期的每一个阶段的具体实现都是由 Maven 插件实现的。Maven 实际上是一个依赖插件执行的框架每个任务实际上是由插件完成。Maven 插件通常被用来创建 jar 文件创建 war 文件编译代码文件代码单元测试创建工程文档创建工程报告插件通常提供了一个目标的集合并且可以使用下面的语法执行codemvn [plugin-name]:[goal-name]/code例如一个 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 编译使用以下命令codemvn compiler:compile/code插件核心机制插件坐标与依赖类似插件也通过 groupId、artifactId、version 唯一标识属性说明常见值groupId插件组织org.apache.maven.plugins官方插件artifactId插件名称maven-compiler-pluginversion插件版本3.8.1插件目标Goals每个插件可以包含多个目标例如maven-compiler-plugincompile编译主代码testCompile编译测试代码maven-surefire-plugintest运行单元测试插件绑定方式1、内置绑定Maven 已为生命周期阶段预绑定插件目标生命周期阶段绑定的插件目标compilemaven-compiler-plugin:compiletestmaven-surefire-plugin:testpackagemaven-jar-plugin:jar或maven-war-plugin:war2、自定义绑定在 pom.xml 中显式配置build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version executions execution phasecompile/phase !-- 绑定到 compile 阶段 -- goals goalcompile/goal /goals /execution /executions /plugin /plugins /build常用官方插件编译相关插件作用常用目标maven-compiler-plugin编译 Java 代码compile,testCompilemaven-resources-plugin处理资源文件resources,testResources配置示例plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.8.1/version configuration source11/source !-- Java 版本 -- target11/target /configuration /plugin测试相关插件作用常用目标maven-surefire-plugin运行单元测试testmaven-failsafe-plugin运行集成测试integration-test跳过测试配置plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-surefire-plugin/artifactId version2.22.2/version configuration skipTeststrue/skipTests !-- 跳过测试 -- /configuration /plugin打包相关插件作用常用目标maven-jar-plugin打包 JAR 文件jarmaven-war-plugin打包 WAR 文件warmaven-assembly-plugin自定义打包single可执行 JAR 配置plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-jar-plugin/artifactId version3.2.0/version configuration archive manifest mainClasscom.example.Main/mainClass !-- 指定主类 -- /manifest /archive /configuration /plugin部署相关插件作用常用目标maven-install-plugin安装到本地仓库installmaven-deploy-plugin部署到远程仓库deploy插件调用方式通过生命周期调用:mvn compile # 触发 maven-compiler-plugin:compile直接调用插件目标:mvn compiler:compile # 直接调用编译目标命令行参数配置:mvn compiler:compile -Dmaven.compiler.source11自定义插件配置参数配置通过 configuration 标签设置plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-surefire-plugin/artifactId version2.22.2/version configuration includes include**/*Test.java/include !-- 只包含特定测试 -- /includes /configuration /plugin多目标执行:executions execution idrun-tests/id phasetest/phase goals goaltest/goal /goals /execution /executions插件开发基础Mojo 概念插件目标对应的 Java 类称为MojoMaven plain Old Java Object。必须继承AbstractMojo并实现execute()方法。简单插件示例实例Mojo(name greet, defaultPhase LifecyclePhase.COMPILE)public class GreetingMojo extends AbstractMojo {Parameter(property name, defaultValue World)private String name;public void execute() throws MojoExecutionException {getLog().info(Hello, name !);}}打包和安装插件mvn clean install # 将插件安装到本地仓库插件类型Maven 提供了下面两种类型的插件类型描述Build plugins在构建时执行并在 pom.xml 的 元素中配置。Reporting plugins在网站生成过程中执行并在 pom.xml 的 元素中配置。下面是一些常用插件的列表插件描述clean构建之后清理目标文件。删除目标目录。compiler编译 Java 源文件。surefile运行 JUnit 单元测试。创建测试报告。jar从当前工程中构建 JAR 文件。war从当前工程中构建 WAR 文件。javadoc为工程生成 Javadoc。antrun从构建过程的任意一个阶段中运行一个 ant 任务的集合。实例我们已经在我们的例子中大量使用了maven-antrun-plugin来输出数据到控制台上。请查看Maven - 构建配置文件章节。让我们用一种更好的方式理解这部分内容在 C:\MVN\project 目录下创建一个 pom.xml 文件。project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.companyname.projectgroup/groupId artifactIdproject/artifactId version1.0/version build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-antrun-plugin/artifactId version1.1/version executions execution idid.clean/id phaseclean/phase goals goalrun/goal /goals configuration tasks echoclean phase/echo /tasks /configuration /execution /executions /plugin /plugins /build /project接下来打开命令终端跳转到 pom.xml 所在的目录并执行下面的 mvn 命令。mvn cleanMaven 将开始处理并显示 clean 生命周期的 clean 阶段。[INFO] Scanning for projects... [INFO] ------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0 [INFO] task-segment: [post-clean] [INFO] ------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] [antrun:run {execution: id.clean}] [INFO] Executing tasks [echo] clean phase [INFO] Executed tasks [INFO] ------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------ [INFO] Total time: 1 second [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012 [INFO] Final Memory: 4M/44M [INFO] ------------------------------------------------------------------上面的例子展示了以下关键概念插件是在 pom.xml 中使用 plugins 元素定义的。每个插件可以有多个目标。你可以定义阶段插件会使用它的 phase 元素开始处理。我们已经使用了clean阶段。你可以通过绑定到插件的目标的方式来配置要执行的任务。我们已经绑定了echo任务到 maven-antrun-plugin 的run目标。就是这样Maven 将处理剩下的事情。它将下载本地仓库中获取不到的插件并开始处理。