昨天下午老铁问我什么时候讲Maven插件:所以老天大半夜终于写了一个maven插件,我今天将与您分享。Maven是一个执行插件的框架,每一个任务实际上都是由插件完成的。那么今天就来说说Maven插件吧。什么是Maven插件?Maven实际上只是Maven插件集合的核心框架。换句话说,插件是完成大部分实际工作的地方。插件用于:创建jar文件、创建war文件、编译代码、单元测试代码、创建项目文档等。插件是Maven的核心功能,它允许跨多个项目重用公共构建逻辑。他们通过在项目描述(项目对象模型(POM))的上下文中执行“操作”(即创建WAR文件或编译单元测试)来做到这一点。插件的行为可以通过通过每个插件目标(或Mojo)的描述公开的一组独特的参数来定制。插件通常提供一组目标,可以使用以下语法执行:mvn[plugin-name]:[goal-name]例如:Java项目可以使用MavenCompilerPlugin编译目标,通过运行编译mvncompiler以下命令:编译插件有哪些类型Maven提供了以下两种插件:以下是一些常用的插件列表:比如我们在例子。现在在C:\MVN\project文件夹创建一个pom.xml文件,内容如下:4.0.0com.companyname.projectgroup项目1.0org.apache.maven.pluginsmaven-antrun-plugin<版本>1.1id.cleancleanruncleanphase插件></plugins>接下来打开命令终端跳转到pom.xml所在目录,执行下面的mvn命令mvncleanMaven会开始处理并显示cleanlife的clean阶段循环。[信息]正在扫描项目...[信息]--------------------------------------------------------------[INFO]BuildingUnnamed-com.companyname.projectgroup:project:jar:1.0[INFO]task-segment:[清理后][信息]--------------------------------------------------------------[信息][清洁:清洁{执行:默认清洁}][信息][antrun:运行{执行:ID。clean}][INFO]Executingtasks[echo]cleanphase[INFO]Executedtasks[INFO]-------------------------------------------------------------------[信息]构建成功[信息]---------------------------------------------------------------[INFO]Totaltime:<1second[INFO]Finishedat:SatJul0713:38:59IST2020[INFO]FinalMemory:4M/44M[INFO]------上面的例子展示了以下关键概念:插件使用plugins元素在pom.xml中定义。每个插件可以有多个目标。您可以定义阶段,插件将使用其阶段元素开始处理。我们使用了清洁阶段。您可以通过绑定到插件的目标来配置要执行的任务。我们已将echo任务绑定到maven-antrun-plugin的运行目标。就是这样,Maven会处理剩下的事情。它将下载本地存储库中不可用的插件并开始处理。插件和目标一个插件通常可以完成多个任务,每个任务称为插件的一个目标。例如执行mvninstall命令时,调用的插件和执行的插件目标如下:将插件绑定到生命周期Maven的生命周期是抽象的,插件是实际上需要完成任务。)必然要在生命周期的特定阶段(phase)中完成。例如:将maven-compiler-plugin插件的编译目标绑定到默认生命周期的编译阶段完成项目的源码编译:built-inbindingMaven默认绑定插件目标为一些生命周期的阶段(phase),因为不同的项目有不同的jar、war、pom等打包方式,所以有不同的绑定关系。默认生命周期的jar包打包方式的绑定关系如下:第二栏中,冒号前是插件的前缀,是插件配置和使用的简化方式;冒号之后是绑定的插件目标。你的仓库里有哪些maven插件?storagedirectory=%localwarehouse%\org\apache\maven\pluginsMaven官网有更详细的官方插件列表:Customplugins前面我们提到了一个Mojo,而Mojo其实就是一个Mavengoals,plugins包含任意数量的goals(Mojos).Mojos可以定义为带注释的java类或Beanshell脚本。Mojo指定有关目标的元数据:目标名称、它适合生命周期的哪个阶段以及它期望的参数。Mojo术语是在maven2中引入的,它完全重写了插件的编写方式。Mojo是对Pojo(plain-old-java-object)的改进,用plain代替了maven。Mojo由一个简单的Java类组成。插件中的多个类似Mojo的通用性可以使用抽象父类进行封装。Maven插件项目的打包方式必须是maven-plugin。现实自定义插件创建maven项目,添加依赖:4.0.0com.tian.mavenmy-maven-pluginma??ven-plugin1.0-SNAPSHOTmy-maven-pluginhttp://maven.apache.orgjunitjunit3.8.1testorg.apache.mavenmaven-plugin-api3.0org.apache.maven.plugin-toolsmaven-plugin-annotations3.4providedTianMojo继承了抽象类AbstractMojo,并实现了execute()方法,用于定义本Mojo的具体操作内容。我们只需要你根据自己的需要编写自己的实现即可。//自定义插件类//名称为@Mojo(name="tian")publicclassTianMojoextendsAbstractMojo{//配置就是这个maven插件在后面使用插件时的excuation中的配置,使用configration标签中的pomtoconfigurepropertyisname,//配置中的标签名称。调用插件的时候会看到,也可以设置默认值"000000")privateStringpwd;@Overridepublicvoidexecute()throwsMo??joExecutionException,MojoFailureException{System.out.println("userm="+userName+"pwd="+pwd);System.out.println("mypluginisrunning");}}然后执行mvn干净安装命令。使用自定义插件将我们的自定义插件添加到我们的maven项目中:com.tian.mavenmy-maven-plugin1.0-SNAPSHOTinstalltianTianWeichang123456然后在我们的IDEA中可以看到:双击my:tian:也可以使用命令:mvnmy:tianmy是前缀,是my-maven的缩写。后缀tian是插件绑定的目标。至此,我们自定义的Maven插件就大功告成了。总结Maven插件是Maven的核心功能。插件类型包括构建类型和报告类型。插件可以有多个目标,可以理解为多个功能。自定义插件主要有两个步骤:依赖相关jar包和重写Mojo。自定义插件的使用和我们使用其他插件是一样的,只要在pom.xml中配置相关配置即可。只有真正理解了插件实现的原理,我们才能慢慢理解和猜测我们平时使用的mvn...命令是如何实现的。本文转载自微信公众号《Java后端技术全栈》,可通过以下二维码关注。转载本文请联系Java后端技术全栈公众号。