java自定义maven插件_Maven自定义插件的实现

为了快速学习自定义 Maven 插件的过程,接下来将实现一个简单的 Hello Maven 插件,功能很简单:输出 Hello World 插件。具体步骤和操作如下。

创建 Maven 新项目,选择 maven-archetype-plugin 项目向导,如图 1 所示。

7-1580899696.png

图 1  选择Archetype

单击 Next 按钮,进入设置 Maven 插件参数界面,输入要创建的插件的 groupId、artifactId 和版本,还有包名,如图 2 所示。

10-1580899697.png

图 2  输入坐标

单击 Finish 按钮,Archetype 插件会自动创建好一个 Maven 插件项目。因为现在用的 Maven 是 3.x 版本的,所以有必要调整 Maven 插件项目必须依赖的 maven-plugin-api 的版本:从 2.x 改成 3.x。这里用的是 3.3.9 版本。样例项目中的 pom 配置如下,注意粗体标识部分。

<?xml version="1.0" encoding="UTF-8"?> 4.0.0cn.com.mvn.pluginMvn.Hello.Plugin0.0.1-SNAPSHOTmaven-pluginMvn.Hello.Plugin Maven Pluginhttp://maven.apache.orgUTF-8org.apache.mavenmaven-plugin-api3.3.9org.apache.maven.plugin-toolsmaven-plugin-annotations3.2providedorg.codehaus.plexusplexus-utils3.0.8junitjunit4.7testorg.apache.maven.pluginsmaven-plugin-plugin3.2Mvn.Hello.Plugintruemojo-descriptordescriptorhelp-goalhelpmojorun-itsorg.apache.maven.pluginsmaven-invoker-plugin1.7true${project.build.directory}/it*/pom.xmlverify${project.build.directory}/local-repo src/it/settings.xmlcleantest-compileintegration-testinstallintegration-testverify

到现在为止,基本上创建好了 Maven 插件项目。

在 cn.com.mvn.plugin.hello 包下,创建 Java 类 HelloName,继承 AbstractMojo,并且在类上面使用 @goal 指定该 Mojo 的目标名称为 name,样例配置代码如下:

package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { public void execute() throws MojoExecutionException, MojoFailureException { } }

在前面的代码基础上添加一个 name 属性,用来接收运行插件的时候传过来的 name 参数,并且使用 @parameter 将 name 属性标注成配置点,样例配置代码如下:

package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { /** * @parameter expression="${name}" * @required * @readonly */ String name; public void execute() throws MojoExecutionException, MojoFailureException { } }

在 HelloName 类中的 execute() 方法中添加插件要实现的逻辑代码。这里的 HelloName 的功能很简单,只是打印问候,所以样例配置代码如下:

package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { /** * @parameter expression="${name}" * @required * @readonly */ String name; public void execute() throws MojoExecutionException, MojoFailureException { System.out.println("Hello" + name); } }

这个插件的目的是打印对 name 的问候。如果 name 为空,或是空字符串,这样的问候就没什么意义了。用户就需要中止问候,并且以日志方式提示用户,样例配置代码如下:

package cn.com.mvn.plugin.hello; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; /** * @goal name */ public class HelloName extends AbstractMojo { /** * @parameter expression="${name}" * @required * @readonly */ String name; public void execute() throws MojoExecutionException, MojoFailureException { if (this.name == null || this.name.trim().equals("")) { // 异常处理 throw new MojoExecutionException("name参数必须设置有效的值"); } else { System.out.println("Hello" + name); // 日志处理 this.getLog().info("这是运行日志提示: 执行完问候"); } } }

到现在为止,HelloName Maven 插件的编写就完成了。要进行插件测试的话,还需要将自定义插件安装好,如果要共享给其他开发人员的话,还必须安装到私服或外面的中央仓库中。

运行 mvn install 就可以完成在本地仓库的安装,如果要安装私服或中央仓库,请参考《Apache基金会的Archiva服务器的搭建步骤》和《Maven私服的配置和使用》教程。

在命令行中输入如下命令。

Mvn cn.com.mvn.plugin:Mvn.Hello.Plugin:name -Dname=zhangsan

命令执行效果如下:

[INFO] ————————————————————————

[INFO] [INFO] — Mvn.Hello.Plugin:0.0.1-SNAPSHOT:name (default-cli) @ MvnDemoPlugin —

Hello lisi

[INFO] 这是运行日志提示:执行完问候

[INFO] ————————————————————————

[INFO] BUILD SUCCESS

[INFO] ————————————————————————

[INFO] Total time: 1.139 s

[INFO] Finished at: 2017-01-08T11:55:48+08:00

[INFO] Final Memory: 8M/108M

[INFO] ————————————————————————

创建一个简单的 Maven 项目,在它的 pom 中添加 HelloName 插件如下:

cn.com.mvn.pluginMvn.Hello.Plugin0.0.1-SNAPSHOTnametestlisi

执行 mvn test,可以看到如下日志。

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] [INFO] — Mvn.Hello.Plugin:0.0.1-SNAPSHOT:name (default) @ MvnDemoPlugin —

Hello lisi

[INFO] 这是运行日志提示:执行完问候

[INFO] ————————————————————————

[INFO] BUILD SUCCESS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值