• maven插件调试方法


    前言

    以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插件的方法

  • 相关阅读:
    NeiHappy我相信做技术也能身体好
    陈皓程序员技术练级攻略
    张子阳对人生的一点看法
    HaoyuTan程序员之路──C语言
    三种冒泡排序的实现与时间快慢的比较
    R语言——中文分词包jiebaR
    任务计划程序执行bat失败
    R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
    R+NLP︱text2vec包——四类文本挖掘相似性指标 RWMD、cosine、Jaccard 、Euclidean
    R语言做文本挖掘 Part5情感分析
  • 原文地址:https://www.cnblogs.com/xiaoxi666/p/9570826.html
Copyright © 2020-2023  润新知