前言

以IntelliJ IDEA为例,通常我们调试maven项目时,都是直接点击调试按钮即可。但maven编写的插件就不同了,由于插件需要打包成Jar加载到项目中,所以如果我们需要在编写插件源码时调试的话,就不能直接点击调试按钮了(因为没有Main类),那么该怎么办呢?

解决方案一(直接在插件项目中调试)

假设及正在编写的maven插件拥有如下坐标:

<groupId>myPluginGroupId</groupId>
<artifactId>myPluginArtifactId</artifactId>
<version>myPluginVersion</version>

再假设你想将这个插件用在某个项目中,而项目中的pom.xml是这样定义这个插件的:

<plugin>
<groupId>myPluginGroupId</groupId>
<artifactId>myPluginArtifactId</artifactId>
<version>myPluginVersion</version>
<executions>
<execution>
<id>myPluginGoal</id>
<phase>compile</phase>
<goals>
<goal>myPluginGoal</goal>
</goals>
</execution>
</executions>
</plugin>

其中,myPluginGoal 即为你要调试的目标。

那么可以在Terminal中输入命令:

mvnDebug myPluginGroupId:myPluginArtifactId:myPluginVersion:myPluginGoal

然后,程序会自动分配8000 Listen端口。此时,在myPluginGoal对应的程序中打上断点,再点击调试按钮,就可以调试啦!

解决方案二(目标项目和插件项目联调)

这样的调试方式其实是服务器客户端的方式,目标项目是服务器,插件项目是客户端;只不过服务器和客户端都在我们本地电脑上。

首先在在目标项目中,增加Maven运行配置

进入配置后,先进入Parameters中,配置Command line:

myPluginGroupId:myPluginArtifactId:myPluginVersion:myPluginGoal -DgroupId=myPluginGroupId -DartifactId=myPluginArtifactId -Dversion=myPluginVersion

注:如果插件已经在目标项目的 pom 中定义,可以只写myPluginGroupId:myPluginArtifactId:myPluginVersion:myPluginGoal,后面的 -DgroupId 等参数可以不写。

其中 -D 是 maven 命令,可以在终端输入 mvn -h 查看其作用:设置属性。类似例子可参见 https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

再进入Runner, 不勾选“Use project settings”,配置VM Options:

其中的端口号可以改成其他的。

然后配置maven插件项目

增加Remote配置,并将其中的端口号改成和目标项目端口号相同的值即可。

现在可以开始调试啦

首先点击目标项目的运行按钮,启动Listening...,再到插件项目中打好断点、点击调试按钮,即可开始调试。

后记

调试的方法有多种,本文中的方法比较简单,如有特殊需求可查询其他方法。

另外,插件可以自定义前缀,方便实用。具体定义方式可查看官方文档,本文不再赘述。

参考资料

《Maven实战》第17章介绍了编写maven插件的方法

maven插件调试方法的更多相关文章

  1. 【曹工杂谈】详解Maven插件调试方法

    前言 今年的更新频率简直是降至冰点了,一方面平时加班相对多一些了,下班只想玩手机:另一方面,好像进了大厂后,学习动力也很低了,总之就,很懒散,博客的话,今年都才只更新了不到5篇. 现在慢慢有一点状态, ...

  2. 安装Eclipse Maven插件的方法

    安装IDE Plugins的方法有很多.其一:在线安装,通过Help-->Install New Software的方式,输入HTTP地址来安装,简单易操作,但是也优缺点,就是下载速度慢,或者有 ...

  3. myeclipse2014下卸载,安装maven插件。

    转自:https://blog.csdn.net/gaoshang10/article/details/21177893 一.卸载方法: 点击Help->About Myeclipse Ente ...

  4. 为maven插件设置参数的三种方法

    很多的maven插件都提供了丰富的可选参数,用户可以通过设置特定的参数值来控制maven插件的行为.设置插件参数的方法主要有三种,分别是命令行设置,POM文件中为插件设置全局参数和POM文件中为插件设 ...

  5. 安装Eclipse Maven插件的几种方法

    文章出处:http://blog.csdn.net/lfsfxy9/article/details/9397937 感谢作者的分享! 昨天直接在机器上配置了Maven环境,今天顺便把Eclipse等I ...

  6. Eclipse 安装 Maven 插件的几种方法

    转自:https://blog.csdn.net/oqqHun123/article/details/79674994 昨天直接在机器上配置了Maven环境,今天顺便把Eclipse等IDE环境配置好 ...

  7. 在Eclipse中使用Maven插件 博客分类: Java相关技术

    简介 本文介绍如何在Eclipse中通过maven插件编写java项目和web项目. 安装Maven 下载Maven最新版本,见:maven.apache.org/download.html 当前版本 ...

  8. 安装eclipse的maven插件

    我们团队用maven来管理项目需要的库文件,其实以前都没听过maven,第一次接触这个,师兄要我直接去装下这个,开始以为还挺简单的,没想到中间遇到了一些小麻烦,现在把我成功安装maven的过程分享下, ...

  9. MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子

    什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...

随机推荐

  1. 时间字符串格式化 js

    /*格式化*/ function dateFormat(dateString, format) { if (!dateString) return ""; //var time = ...

  2. Python小练习之寻找101到200之间的素数

    方法1:from math import * def primeNumber(start,end): num = 0 for i in range(start,end): flag = 0 for j ...

  3. spring 装配

    spring 3种装配方式: 支持混合配置:不管使用JavaConfig还是使用XML进行装配,通常都会创建一个根配置(root configuration), 这个配置会将两个或更多的装配类和/或X ...

  4. 当GDPR来敲门,中国互联网企业该如何应对?

    本文来自 网易云社区 . 欧盟<通用数据保护条例>(General Data Protection Regulation,GDPR)已于2018年5月25日正式生效,谷歌.Facebook ...

  5. Android 视频播放器 (二):使用MediaPlayer播放视频

    在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...

  6. [Swift]枚举类型:UIBarButtonItem的24种样式

    UIBarButtonSystemItemFlexibleSpace 可变空白, 在调用的过程中,使用  UIBarButtonSystemItemFlexibleSpace去占位,达到实现规范化的目 ...

  7. 空手套白狼,硬阅java字节码class文件

    如下,是一些java字节码也就是原始的class文件,当应用部署到线上之后,我们能够看到的也就是这样的字样了.那么怎样解呢?就让我们一起,来解读解读字节码吧! Offset A B C D E F C ...

  8. Event Loop浅谈

    event loop 即事件循环.最初了解到js的event loop机制是通过自己对js中异步.同步的疑惑.今天聊一聊自己的理解,希望和大家一起学习. 首先,让我们看一个经典的setTimeOut的 ...

  9. 工作随笔—static关键字

    问题:在声明一个变量的时候,添加static与不添加static区别在哪里? 回答:在声明一个变量的时候,添加static关键字,那么这个变量就会在保存在代码器里面,而不会保存到堆里面去了,当其余的对 ...

  10. mysql 开发进阶篇系列 54 权限与安全(账号管理的各种权限操作 下)

    1. 查看权限 -- 如果host值不是%, 就要加上host值,下面查看bkpuser用户权限(6个权限, 限本地连接) SHOW GRANTS FOR bkpuser@localhost; -- ...