2017-03-10 3 views
5

Ich entwickle ein Projekt mitFramework mit Gradle Build-Tool. Das Problem, das ich habe ist, dass Breakpoints in IntelliJ funktioniert einfach nicht in irgendeiner Weise, die ich versucht habe.Intellij IDEA Debugger funktioniert nicht auf Gradle Vert.X Projekt

Hier ist eine Laufzeitkonfiguration für Vert.X, die ich in Gradle verwenden:

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

So ist der Einsatz Gradle Verwendung erfolgt ist, läuft ohne Probleme, IntelliJ Debugger verbunden ist, aber Haltepunkte funktionieren nicht.

Die Art und Weise habe ich versucht, damit es funktioniert:

1) Gradle Lauf-Konfiguration. Hier ist eine Laufzeitkonfiguration für Intellij IDEA: Intellij Run Configuration using Gradle

Versucht, ein Remote-Debugging-Tool zu verwenden, begann Anwendung mit den folgenden VM-Optionen:

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

Aber das hat nicht funktioniert.

2) Anwendungskonfiguration: IntelliJ Run Configuration using Application

In diesem Fall kann ich das Projekt einfach nicht starten, wie ich die folgende Meldung auf dem Start erhalten:

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

Vert.X Core Bibliothek in der ist Classpath und Konfiguration scheint korrekt zu sein, so kann nicht erhalten werden, ist das Problem.

Der Quellcode des Projekts ist öffentlich und kann auf GitHub finden:

vertx-gradle-architecture-starter

Vert.x Version - 3.4.0. Gradel Version - 3.4.1. IntelliJ IDEA Version - 2016.3.5. Betriebssystem - MacOS Sierra 10.12.3.

Interessante Tatsache ist, wenn ich Vert.X aus Tests bereitstellen - Breakpoints arbeiten. Irgendwelche Ideen, warum Breakpoints in den oben beschriebenen Fällen nicht funktionieren?

+0

Zumindest Ihre zweite Option sollte definitiv funktionieren! Welche Version von vert.x verwendest du? Vielleicht ist es eine ältere Version, die nicht 'io.vertx.core.Launcher' hat? – MirceaG

+0

Es ist "io.vertx.core.Launcher", wie Sie im Screenshot sehen können. Ich bekomme die Meldung 'Fehler: Konnte Hauptklasse io.vertx.core.Launcher' beim Start dieser Konfiguration nicht finden oder laden, daher kann der Debugger nicht mit dem Ereignis überprüft werden. Und ich habe 'vertex-core' in meinen Abhängigkeiten. –

+0

Entschuldigung, ich habe nicht gesehen, dass Sie angegeben haben, dass Sie 3.4.0 verwenden. Ich habe dein GitHub-Projekt und versuche es lokal mit der Konfiguration aus dem Screenshot. Es klappt! Versuchen Sie, das Projekt in Intellij zu reinigen/neu zu erstellen. – MirceaG

Antwort

5

Hier sind Lösungen für beide Probleme. Danke an @CrazyCoder für Hilfe zu diesem Thema.

1) run Der Befehl wird in einer separaten VM ausgeführt. Also, um es zu arbeiten, ich habe --java-opts Argument an das Skript hinzugefügt:

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" 
    ] 
} 

Dies ermöglicht Remote debug Konfiguration auf Port 8000 zu befestigen.

2) Standardmäßig erstellt Intellij IDEA separate Module pro Quellensätze, daher hatte ich Quellensätze für api_main und api_test Module. Nach dem Deaktivieren dieser Funktion - Application Debug-Test wurde gestartet.

Dies kann in Gradle-Einstellungen deaktiviert werden. Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle: Deaktivieren Sie die Option zum Erstellen separater Module pro Quellensatz.

enter image description here

Dies ist eine IntelliJ IDEA Ausgabe - reference.

+0

Ohne "create separate Modul pro Source root" und wenn Sie mehr als src/main (zum Beispiel src/integrationTest) haben Sie es dann falsch - IntelliJ wird nicht die Konfiguration für dieses Modul (Klassenpfad und so weiter) kennen – kboom

+0

Sollte geht das auch mit Kotlin? – Ville

0

Ich hatte genau das gleiche Problem und die folgenden funktionierten für mich. in intelliJ sind die Optionen redeploy, launcher und on redeploy nicht erforderlich. Wenn wir diese entfernen, funktioniert das Debug, nachdem die Anwendung gestartet wurde.

run { 
    args = [ 
     'run', mainVerticleName, 
     "-conf", confPath 
    ] 
} 
Verwandte Themen