手撸一款属于自己的 Maven 插件,说干就干

存储
今天,冰河给大家分享一篇大部分人都不会的技能,那就是我们自己动手写一款属于自己的Maven插件。好了,直接进入今天的主题吧。

[[432395]]

大家好,我是冰河~~

今天,冰河给大家分享一篇大部分人都不会的技能,那就是我们自己动手写一款属于自己的Maven插件。好了,直接进入今天的主题吧。

Maven插件的相关概念

插件坐标定位

插件与普通jar包一样包含坐标定位属性即:groupId、artifactId、version,当使用该插件时会从本地仓库中搜索,如果没有则从远程仓库下载,例如下面的配置所示。

  1. <!-- 唯一定位到dependency 插件 --> 
  2. <groupId>org.apache.maven.plugins</groupId> 
  3. <artifactId>maven-dependency-plugin</artifactId> 
  4. <version>2.10</version> 

execution配置

execution 配置包含一组指示插件如何执行的属性:

  • id :执行器命名
  • phase:标识执行的阶段
  • goals:标识执行的目标或功能
  • configuration:标识执行目标所需的配置文件

插件的配置和使用示例

将插件依赖拷贝到指定目录。

  1. <plugin> 
  2.   <groupId>org.apache.maven.plugins</groupId> 
  3.   <artifactId>maven-dependency-plugin</artifactId> 
  4.   <version>3.1.1</version> 
  5.   <executions> 
  6.     <execution> 
  7.       <id>copy-dependencies</id> 
  8.       <phase>package</phase> 
  9.       <goals> 
  10.         <goal>copy-dependencies</goal> 
  11.       </goals> 
  12.       <configuration>        
  13.         <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> 
  14.         <overWriteReleases>false</overWriteReleases> 
  15.         <overWriteSnapshots>true</overWriteSnapshots> 
  16.         <excludeTransitive>true</excludeTransitive> 
  17.       </configuration> 
  18.     </execution> 
  19.   </executions> 
  20. </plugin> 

常用插件的使用

通过命令执行插件语法

除了通过配置的方式使用插件以外,Maven也提供了通过命令直接调用插件目标其命令格式如下所示。

  1. mvn groupId:artifactId:version:goal -D{参数名} 

通过命令执行插件示例

(2)展示pom的依赖关系树

  1. mvn org.apache.maven.plugins:maven-dependency-plugin:2.10:tree 

(3)直接简化版的命令,但前提必须是maven 官方插件

  1. mvn dependency:tree 

其它常用插件

(1)查看pom 文件的最终配置

  1. mvn help:effective-pom 

(2)原型项目生成

  1. archetype:generate 

(3)快速创建一个Web程序

  1. mvn archetype:generate -DgroupId=io.mykit.web -DartifactId=mykit-maven-web -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false 

(4)快速创建一个Java项目

  1. mvn archetype:generate -DgroupId=io.mykit.java -DartifactId=mykit-maven-java -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

自定义Maven插件

这里,我们先来说说自定义Maven插件的步骤,这里,我将自定义Maven插件的步骤总结如下。

(1)创建maven 插件项目

(2)设定packaging 为maven-plugin

(3)添加插件依赖

(4)编写插件实现逻辑

(5)打包构建插件

接下来,我们就来实现自定义Maven插件。

配置插件项目的pom.xml

这里,我直接跳过了Maven项目的创建,相信小伙伴们都会创建Maven项目,这里,我就不再赘述了,直接给出pom.xml文件的配置,如下所示。

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" 
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  5.     <modelVersion>4.0.0</modelVersion> 
  6.     <groupId>io.mykit.plugin</groupId> 
  7.     <version>1.0.0-SNAPSHOT</version> 
  8.     <artifactId>mykit-maven-plugin</artifactId> 
  9.     <packaging>maven-plugin</packaging> 
  10.     <dependencies> 
  11.         <dependency> 
  12.             <groupId>org.apache.maven</groupId> 
  13.             <artifactId>maven-plugin-api</artifactId> 
  14.             <version>3.5.0</version> 
  15.         </dependency> 
  16.         <dependency> 
  17.             <groupId>org.apache.maven.plugin-tools</groupId> 
  18.             <artifactId>maven-plugin-annotations</artifactId> 
  19.             <version>3.5</version> 
  20.         </dependency> 
  21.     </dependencies> 
  22.     <build> 
  23.         <plugins> 
  24.             <plugin> 
  25.                 <groupId>org.apache.maven.plugins</groupId> 
  26.                 <artifactId>maven-compiler-plugin</artifactId> 
  27.                 <version>3.6.1</version> 
  28.                 <configuration> 
  29.                     <source>1.8 </source> 
  30.                     <target>1.8 </target> 
  31.                 </configuration> 
  32.             </plugin> 
  33.         </plugins> 
  34.     </build> 
  35. </project> 

Maven插件的实现类

接下来,我们来编写Maven插件的实现类。这里,我直接给出类的源代码,如下所示。

  1. package io.mykit.plugin;  
  2.  
  3. import javafx.beans.DefaultProperty; 
  4. import org.apache.maven.plugin.AbstractMojo; 
  5. import org.apache.maven.plugin.MojoExecutionException; 
  6. import org.apache.maven.plugin.MojoFailureException; 
  7. import org.apache.maven.plugins.annotations.LifecyclePhase; 
  8. import org.apache.maven.plugins.annotations.Mojo; 
  9. import org.apache.maven.plugins.annotations.Parameter; 
  10.  
  11. /** 
  12.  * @author binghe 
  13.  * @description 自定义Maven插件 
  14.  */ 
  15. @Mojo(name = "binghe"
  16. public class MykitMavenPlugin extends AbstractMojo { 
  17.     private final Logger logger = LoggerFactory.getLogger(MykitMavenPlugin.class); 
  18.     @Parameter(property="sex"
  19.     String sex; 
  20.  
  21.     @Parameter(property="describe"
  22.     String describe; 
  23.  
  24.     public void execute() throws MojoExecutionException, MojoFailureException { 
  25.         logger.info(String.format("binghe sex=%s describe=%s",sex,describe)); 
  26.     } 

打包安装插件

将自定义的Maven插件打包并安装到本地Maven仓库,如下所示。

  • 打包
  1. mvn clean package 
  • 安装到本地仓库
  1. mvn clean install 

其他项目中引用自定义插件

如果需要在其他项目中使用我们自定义的Maven插件,则只需要创建一个Maven项目,在Maven项目的pom.xml文件中引入如下配置即可。

  1. <build> 
  2.     <plugins> 
  3.         <plugin> 
  4.             <!--引入刚刚的插件依赖--> 
  5.              <groupId>io.mykit.plugin</groupId> 
  6.              <version>1.0.0-SNAPSHOT</version> 
  7.              <artifactId>mykit-maven-plugin</artifactId> 
  8.             <!-- 这里加入的是相关参数,这些参数必须跟插件实现里面的属性保持一致 --> 
  9.             <configuration> 
  10.                 <sex>男</sex> 
  11.                 <describe>冰河技术微信公众号作者</describe> 
  12.             </configuration> 
  13.         </plugin> 
  14.     </plugins> 
  15. </build> 

好了,今天就到这儿吧,我是冰河,我们下期见!!

 

责任编辑:武晓燕 来源: 冰河技术
相关推荐

2022-04-18 19:02:53

chrome扩展浏览器

2021-09-26 05:00:11

Vscode插件

2015-04-09 09:38:53

Tap4FunAWS手游

2021-05-14 13:30:17

Mybatis分表插件

2011-01-19 13:19:39

Thunderbird插件

2011-08-09 09:16:44

Eclipse

2013-09-04 13:27:05

Linux发行版

2022-05-13 08:35:42

单元测试IDEA

2022-04-22 08:22:50

MVCCMySQLC++

2022-04-30 09:49:58

终端工具插件

2011-06-17 11:22:33

jQueryjQuery插件

2022-06-08 19:08:32

AI押题作文

2022-03-01 11:38:51

RPC框架后端

2020-04-16 08:27:51

IDEA插件编辑工具Java

2021-11-05 15:23:35

Karta插件安全工具

2013-10-15 10:29:44

天天酷跑手游

2009-11-30 16:59:49

2023-12-28 18:40:42

2022-02-23 14:21:20

Chrome插件浏览器

2020-08-03 08:10:52

UDPTCP通信
点赞
收藏

51CTO技术栈公众号