112
votes

Can you debug a maven goal with Intellij IDEA? I know that I can right-click and run Debug. However, the maven plugin does not appear in my External Libraries list, so I can not go into the code and set a breakpoint. Thus, Debug runs through the goals without stopping, like Run does.

I am using OS X 10.8 and IDEA 12.0.2.

EDIT: Goal

I've written custom specRunner for https://github.com/searls/jasmine-maven-plugin - However, $specs$ stays empty. So I try to see which files are actually loaded.

9
debug a maven goal? what is that maven goal? what do you want to achieve? and what is your actual problem?Alonso Dominguez
With maven goal I mean jasmine:test, or jasmine:bdd. As far as I've seen, each Mojo must implement an execute() method which I'd like to debug. However, since I have no access to the jar from IDEA, I cannot set a breakpoint.rweng

9 Answers

208
votes

Figured it out:

  1. from the command line, run maven goal with mvnDebug instead of mvn. E.g. mvnDebug clean
  2. Open the source of the maven plugin you want to debug in intelliJ and set a breakPoint
  3. In IDEA, add a Remote JVM Debug Configuration.
    1. Under Settings, set Transport: Socket, Debugger Mode: Attach, Host: localhost, Port: 8000 (default port of mvnDebug).
  4. Run the Configuration in Debug mode. It should connect to the waiting mvnDebug jvm.
45
votes

Very easy. I am using Intellj Idea 15.0.4

  1. Set the breakpoint in your maven plugin
  2. In the tag "Maven Projects" go to the project witch is using your maven plugin.
  3. In "Plugins" find your plugin and over the goal right click and Debug

Here is a screenshot:

screenshot

19
votes

Old question, but I was having the same need and it took me a while to get it to work. Hopefully can help someone.

For test debugging use:

mvn <goal> -Dmaven.surefire.debug 

or

mvn <goal> -Dmaven.failsafe.debug

When execution stops and listens to socket at address 5005 (default) you run your configured remote debugger.

How to configure it:

Run -> Edit configurations -> Remote Transport: socket Debugger mode: Attach Port: 5005 (default)

-> Save.

12
votes

I think the easiest solution is to temporarily add the maven plugin as a dependency. Once this is done, IntelliJ will treat this just like any other dependency and you can set breakpoints the usual way.

12
votes

The easiest way to debug maven goal ONLY within IntelliJ is to create a regular maven goal and in the runner tab pass those VM options:

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

Where 8000 is a port number for remote debugging.

Maven goal configuration

Then create new Remote configuration with port 8000. Run this configuration after running maven goal.

Remote debugging configuration

3
votes

Either You can refer to above answer Or just add this plugin to 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>

And run maven goal with mvn instead of mvnDebug. E.g. mvn spring-boot:run

In IDEA, add a Remote Configuration. Under Settings, set Transport: Socket, Debugger Mode: Attach, Host: localhost, Port: 8000 (default port of mvnDebug).

Run as Debug in IDEA , whenever you want to debug the code.

2
votes

Since you are working with Intellij, there is already a built-in debugger there and you do not need to necessarily use mvnDebug which is a command line tool. Check out this tutorial: How to Debug Maven Applications in Intellij IDEA.

The tutorial uses the Maven Exec Plugin and lets you debug the application without a need to use the command line or MvnDebug. Thought sharing it might be of value here.

2
votes

@Peter Szanto 's answer work for me, but I don't like mess my source code.

And I can't make those MvnDebug way work.

So I try another way, add plugin source as IDEA module.

Here is the detail step:

  1. Clone the plugin source as an independent project.

  2. In your project, go to File -> New -> Module from Exist Sources and add the plugin project you clone in step 1.

  3. Now you can open the plugin source code and set some break point.

  4. Run your maven goal as debug mode, it should stop at the break point.

1
votes

No need to setup up Java Remote Debugger or anything like that. It is literally just a right click -> debug on the Maven goal now, as explained in the official docs.