webentwicklung-frage-antwort-db.com.de

So führen Sie Jetty über Gradle im Debug-Modus aus

Weiß jemand, wie man das Jetty Gradle-Plugin so konfiguriert, dass es im Debug-Modus ausgeführt wird, sodass ich einen Remote-Debugger anschließen kann?

Ich habe versucht, die Gradle und Java-Optionen einzustellen:

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

... aber es scheint nicht zu funktionieren.

Ich bin in der Lage, meine eigene Anlegestelle zu installieren, aber nicht über Gradle (JettyRun oder JettyRunWar).

Grüße.

34
JARC

Unter Linux:

export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n"
gradle jettyRun

Unter Windows:

set GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=‌​n
gradle jettyRun

Versuchen Sie es mit dem Gretty-Plugin, es bietet Gradle-Aufgaben wie jettyRunDebug, jettyStartDebug usw.

Quellcode und Dokument: https://github.com/akhikhl/gretty

Offenlegung: Ich bin Autor von Gretty Plugin.

17
akhikhl

Mine ist ein Multiprojekt-Build und ich habe versucht:

$ export GRADLE_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,suspend=y,server=y"
$ gradle jettyRun

Und das hat NICHT funktioniert. Ich habe sogar versucht, -Xnoagent zu der Einstellung GRADLE_OPTS oben hinzuzufügen, aber auch das hat keinen Unterschied gemacht. Auch das Setzen von Java_OPTS anstelle von GRADLE_OPTS hat das Problem nicht gelöst. Was das Problem für mich gelöst hat, war das Hinzufügen einer gradle.properties mit:

org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5005,suspend=y

Und sofort konnte ich den Haltepunkt erreichen. Möglicherweise haben in anderen Antworten erwähnte Lösungen für mich nicht funktioniert, da es sich um ein Multiprojektprojekt handelt. Nicht sicher!

Ich wollte nur die Lösung anbieten, die für mich funktioniert hat, falls die oben genannten Lösungen für andere Leute nicht funktionieren.

P.S: Versuchte mit Gradle 1.5/1.6 und das Hinzufügen der obigen Einstellung zu gradle.properties funktioniert für beide Versionen!

5
user770119

Laufen Sie gradle im Daemon-Modus? Nach meinem Verständnis wird der Daemon dann die Anlegestelle ausführen. Daher müssen Sie die JVM-Argumente für den Dämon festlegen. Dies sollte möglich sein, indem org.gradle.jvmargs in gradle.properties festgelegt wird. 

Siehe http://gradle.org/docs/current/userguide/tutorial_this_and_that.html#sec:gradle_properties_and_system_properties

Einfach ein Projekt, das hier im Nicht-Daemon-Modus funktioniert

build.gradle:

apply plugin: 'idea'
apply plugin: 'jetty'

src/main/Java/de/Test.Java:

package com;
public class Test {
    static public String greet() {
        return "Hi";
    }
}

src/main/webapp/index.jsp:

<%@ page import="com.Test" %>
<html><body>
<%= Test.greet() %>
</body></html>

Befehlszeile (obwohl in Cygwin):

$ GRADLE_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n' gradle jettyRun

Gradle hängt dann und ich kann den Debugger von Intellij auf Port 9999 setzen und einen Haltepunkt in der Java-Datei setzen. Wenn ich dann versuche, die Webseite zu öffnen, informiert mich Steg darüber, dass ich den Haltepunkt erreicht habe.

5
thoredge

set GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n funktioniert auch NICHT für mich, wenn er mit gradle jettyRunWar ausgeführt wird.

Ich habe eine andere Lösung gefunden, die funktioniert. Führen Sie gradle jettyRunWar mit den folgenden Optionen aus gradle -Dorg.gradle.jvmargs="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" jettyRunWar

Aber wenn ich in gradle.properties denselben Parameter hinzufüge, funktioniert es nicht ... 

3
user3876447

füge dies dem build.gradle hinzu

jettyRun {
    jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
}
2
Damith Ganegoda

In meinen Fällen funktioniert es nicht, bis ich den folgenden Befehl ausführt .GRADLE_OPTS='-XX:MaxPermSize=256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001' gradle jettyRun

Und wenn es funktioniert, kann ich in der Server-Konsole System.out.println(...) verwenden, um zu überprüfen, was ich sehen möchte. Zum Breakpoint-Debugging habe ich leider keinen Weg gefunden. Jeder weiß wie, willkommen hinzufügen.

0
gongmingqm10

Ich habe es mit org.gradle.debug-Eigenschaft ausgeführt:

./gradlew -Dorg.gradle.debug=true jettyRun

An diesem Punkt bleibt Gradle stehen und wartet auf eingehende Debug-Verbindungen.

Dann habe ich eine Remote-Run-Konfiguration in IntelliJ mit dem Wert "Befehlszeilenargumente zum Ausführen von Remote-JVM" als -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 erstellt

Schließlich habe ich diese neue Konfiguration ausgeführt, gradle setzte den Fortschritt fort und IDE stoppte am ersten Haltepunkt.

0
Cyrusmith

Schauen Sie sich auch diese beiden Links aus dem offiziellen Wiki an:

https://github.com/akhikhl/gretty/issues/36

http://akhikhl.github.io/gretty-doc/Debugger-support.html

Es kann Ihnen helfen, das kleine Plugin für das Debugging der Anlegestelle mit IntelliJ Idea richtig zu konfigurieren

0
Sorokin Andrey