如何使用IntelliJ IDEA调试Maven目标?


99

您可以使用Intellij IDEA调试Maven目标吗?我知道我可以右键单击并运行Debug。但是,该maven插件未出现在“ 外部库”列表中,因此无法进入代码并设置断点。因此,调试就像运行一样,不间断地运行目标。

我正在使用OS X 10.8和IDEA 12.0.2。

编辑:目标

我已经为https://github.com/searls/jasmine-maven-plugin编写了自定义specRunner- 但是,$ specs $保持为空。因此,我尝试查看实际加载的文件。


2
调试一个Maven目标?这个目标是什么?您想实现什么?您的实际问题是什么?
阿隆索·多明格斯

对于Maven目标,我的意思是茉莉花:test或茉莉花:bdd。据我所知,每个Mojo必须实现一个我想调试的execute()方法。但是,由于无法从IDEA访问jar,因此无法设置断点。
rweng 2013年

Answers:


190

弄清楚了:

  1. 在命令行中,使用mvnDebug代替来运行maven目标mvn。例如mvnDebug clean
  2. 在intelliJ中打开要调试的Maven插件的源代码并设置一个breakPoint
  3. 在IDEA中,添加一个Remote配置。
    1. 在设置下,设置传输:套接字,调试器模式:附加,主机:本地主机,端口:8000(mvnDebug的默认端口)。
  4. 在调试模式下运行配置。它应该连接到正在等待的mvnDebug jvm。

2
如何在Intellij中打开Maven插件的源代码?
CorayThan,2015年

我想我以正确的版本从github克隆了它。其余的自动发生。
rweng

3
如果我想使用运行测试mvn test -Dtest=com.example.MyTest(我的测试用例仅在使用maven运行时失败)-在这种情况下,IDEA断点将被忽略,似乎... :(
RobertG

2
找到了它:在stackoverflow.com/q/6573289/1143126中,这基本上是个问题
RobertG

具体来说,以下是使用surefire调试Maven目标的方法:stackoverflow.com/a/8339155/929708
JJ Brown,

40

好简单。我正在使用Intellj Idea 15.0.4

  1. 在您的Maven插件中设置断点
  2. 在标签“ Maven Projects”中,转到该项目,女巫正在使用您的maven插件。
  3. 在“插件”中找到您的插件,然后在目标上方右键单击并调试

这是屏幕截图:

屏幕截图


1
尽管此答案的得分为负,但它确实帮助我解决了所遇到的问题(如何在IntelliJ中调试基于Maven的项目),并且在“搜索”该问题时将其引导至此页面。
gbmhunter 16-10-17

谢谢您,先生,您的回答帮助我弄清楚了如何在想法运行期间自动使用Maven插件
Anatoly Yakimchuk 2016年

这实际上是一个很好的答案。对我来说,用这种方法比设置远程调试(如已接受的答案中所建议的)绝对更容易,更简单。不知道为什么另一个被接受。也许对问题中描述的情况不起作用,但是如果确实对我有用,那么谢谢!
Chanandler Bong

2
“在您的Maven插件中设置断点”我不确定这到底意味着什么?这与在Java类本身中设置断点有什么不同?
Amalgovinus

“在Maven插件中设置断点”意味着将断点放入Maven插件类中
gorums,

17

老问题了,但是我有同样的需求,花了我一段时间才使它开始工作。希望可以帮助某人。

对于测试调试,请使用:

mvn <goal> -Dmaven.surefire.debug 

要么

mvn <goal> -Dmaven.failsafe.debug

当执行停止并侦听地址为5005(默认)的套接字时,您将运行配置的远程调试器。

如何配置:

运行->编辑配置->远程传输:套接字调试器模式:附加端口:5005(默认)

->保存。


10

仅在IntelliJ中调试Maven目标的最简单方法是创建一个常规的Maven目标,并在“运行器”选项卡中传递这些VM选项:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000

其中8000是用于远程调试的端口号。

Maven目标配置

然后使用端口8000创建新的远程配置。在运行maven目标之后运行此配置。

远程调试配置


8

我认为最简单的解决方案是临时添加Maven插件作为依赖项。完成此操作后,IntelliJ将像对待其他任何依赖项一样对待此问题,您可以按常规方式设置断点。


1
点这个,而不是mvn使用:mvnDebug ...,然后在intellij的端口8000上创建一个远程调试运行程序
user85155

3

您可以参考上面的答案,也可以将此插件添加到pom.xml中

           <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
            <jvmArguments>
            -Xdebug - 
            Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
            </jvmArguments>
            </configuration>
        </plugin>

并使用mvn代替来运行Maven目标mvnDebug。例如mvn spring-boot:run

在IDEA中,添加一个远程配置。在设置下,设置传输:套接字,调试器模式:附加,主机:本地主机,端口:8000(mvnDebug的默认端口)。

每当您要调试代码时,都可以在IDEA中作为Debug运行。


3
问题没有提到春天,这个答案是春天特定的
Amalgovinus

1

由于您正在使用Intellij,因此那里已经有一个内置调试器,您不必使用命令行工具mvnDebug。查看本教程:如何在Intellij IDEA中调试Maven应用程序

本教程使用Maven Exec插件,使您无需使用命令行或即可调试应用程序MvnDebug。共享思想在这里可能有价值。


2
本教程仅涵盖调试exec:java。但是,如果您需要为JVM提供其他参数,则需要使用exec:exec(请参阅stackoverflow.com/questions/7305090/…),该方法无法通过这种方式进行调试。
mirelon

0

@Peter Szanto的答案对我有用,但是我不喜欢弄乱我的源代码。

而且我无法通过这种MvnDebug方式工作。

所以我尝试另一种方法,将插件源添加为IDEA模块

这是详细步骤:

  1. 将插件源克隆为一个独立的项目。

  2. 在您的项目中,转到File -> New -> Module from Exist Sources并添加在步骤1中克隆的插件项目。

  3. 现在,您可以打开插件源代码并设置一些断点。

  4. 将您的Maven目标作为调试模式运行,它应该在断点处停止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.