前言

以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. UDF函数 解码url

    背景 URL 的编码 是ASCII十六进制格式.数仓接受到前端上报的URL,要对URL字段解码. 如要将 https"Fmybook.do%3Frequest_type%3D%26type% ...

  2. DB2日常维护常用命令

    1.检查是否有僵尸进程 ps -emo THREAD | grep -i Z | grep -i 实例名 2.处理死锁  --第一步:查看所有死锁  db2 get snapshot for lock ...

  3. Redis-05.主从复制与Sentinel

    主从复制(master/slave) 主机(master)数据更新后根据配置和策略,自动同步到备机(slave).通过主从复制,能够实现读写分离.容灾恢复. 实现主从复制非常简单,只需要在从(slav ...

  4. 关于isNaN()函数的细节

    根据<JavaScript高级程序设计>的解释,NaN,即非数值(Not a Number),用于表示一个本来要返回数值的操作数未返回数值的情况,例如5/0就会得到NaN. 而因为NaN的 ...

  5. QEMU KVM libvirt手册(4) – images

    RAW raw是默认的格式,格式简单,容易转换为其他的格式.需要文件系统的支持才能支持sparse file 创建image # qemu-img create -f raw flat.img 10G ...

  6. iproute2学习笔记

    一.替代arp, ifconfig, route等命令 显示网卡和IP地址 root@openstack:~# ip link list 1: lo: <LOOPBACK,UP,LOWER_UP ...

  7. Unable to launch the IIS Express Web server

    尝试运行程序,出现此异常提示Unable to launch the IIS Express Web server. 解决问题,是把网址修改为另一个试试: 把http://localhost:1114 ...

  8. Ubuntu允许root远程登录配置

    1.背景 近期在本地的虚拟机VMware上安装了Ubuntu Server 17.04,由于系统是无界面的,所有操作都需要通过Linux命令进行操作.后来不想直接在服务器上操作,想通过远程工具Xshe ...

  9. Maven整合SSM测试

    前面也说到了关于SSM的整合,话不多说直接从创建项目开始CRUD之路(参考前面写过的Mybatis和Spring整合,SSM简单整合),这是整个项目的结构 以及最终的结果.(附上下载地址) 一.创建M ...

  10. Hadoop 单表关联

    前面的实例都是在数据上进行一些简单的处理,为进一步的操作打基础.单表关联这个实例要求从给出的数据中寻找到所关心的数据,它是对原始数据所包含信息的挖掘.下面进入这个实例. 1.实例描述 实例中给出chi ...