Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Intellij IDEA debugger not working on Gradle Vert.X project

I'm developing a project using Vert.X framework using Gradle build tool. The problem I have is that breakpoints in IntelliJ simply doesn't work in any way I've tried.

Here is a run configuration for Vert.X which I use in Gradle:

run {
    args = [
            'run', mainVerticleName,
            "-conf", confPath,
            "--redeploy=$project.ext.watchForChange",
            "--launcher-class=$mainClassName",
            "--on-redeploy=$project.ext.doOnChange"
    ]
}

So the deployment is done using Gradle, runs without any issues, IntelliJ debugger is connected, but breakpoints are not working.

The ways I've tried to make it work:

1) Gradle run configuration. Here is a run configuration for Intellij IDEA: Intellij Run Configuration using Gradle

Tried to use a Remote debugging tool, started application with the following VM options:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

But this didn't work.

2) Application configuration: IntelliJ Run Configuration using Application

In this case I just can't start the project as I get the following message on the startup:

Error: Could not find or load main class io.vertx.core.Launcher

Vert.X Core library is in the classpath and configuration seems to be correct, so can't get were is the problem.

The source code of the project is public and can be found on GitHub:

vertx-gradle-architecture-starter

Vert.X version - 3.4.0. Gradle version - 3.4.1. IntelliJ IDEA version - 2016.3.5. OS - MacOS Sierra 10.12.3.

Interesting fact is when I deploy Vert.X from tests - breakpoints work. Any ideas why breakpoints doesn't work in cases I've described above?

like image 839
Yuriy Yunikov Avatar asked Mar 10 '17 10:03

Yuriy Yunikov


People also ask

Why my debugger is not working in IntelliJ?

If the code is outdated, or the versions (the source code and the compiled class) mismatch in any way, it can happen that the debugged is giving the IDE information to show a certain line, but that information is not correct giving the current source code, which might cause what appears to be the debugged "jumping" ...

How do I debug in Gradle?

To do that, just pick the Gradle Remote Debug configuration and then click the Debug icon on the project to be debugged. For more info, you can read the Gradle documentation. Follow us for more productivity tools & ideas for Android, Kotlin & Gradle projects.


2 Answers

Here are solutions to both issues. Thanks to @CrazyCoder for help on this.

1) run command is run in separate VM. So, to make it work, I've added --java-opts argument to the script:

run {
    args = [
            'run', mainVerticleName,
            "-conf", confPath,
            "--redeploy=$project.ext.watchForChange",
            "--launcher-class=$mainClassName",
            "--on-redeploy=$project.ext.doOnChange",
            // used for attaching remote debugger
            "--java-opts", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000"
    ]
}

This allows to attach Remote debug configuration on port 8000.

2) By default, Intellij IDEA creates separate modules per source sets, so I had source sets for api_main and api_test modules. After turning off this feature - Application debug run started to work.

This can be turned off in Gradle Settings. Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle: uncheck create separate modules per source set.

enter image description here

This is an IntelliJ IDEA issue - reference.

like image 110
Yuriy Yunikov Avatar answered Nov 15 '22 15:11

Yuriy Yunikov


I had the exact same issue and following worked for me. redeploy, launcher and on-redeploy options are not necessary in intelliJ. if we remove those the debug works after application is up.

run {
    args = [
        'run', mainVerticleName,
        "-conf", confPath
    ]
}
like image 3
Kishore Tulsiani Avatar answered Nov 15 '22 15:11

Kishore Tulsiani