web-dev-qa-db-fra.com

Comment exécuter Jetty via Gradle en mode débogage

Est-ce que quelqu'un sait comment configurer le plugin Jetty Gradle pour qu'il s'exécute en mode débogage afin que je puisse attacher un débogueur distant?

J'ai essayé de définir le grade et Java choisit de:

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

... mais cela ne semble pas fonctionner.

Je peux faire fonctionner correctement ma propre installation de jetée, mais pas via gradle (jettyRun ou jettyRunWar).

Cordialement.

34
JARC

Sous Linux:

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

Sous Windows:

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

Essayez d’utiliser le plugin Gretty, il fournit des tâches de gradation telles que jettyRunDebug, jettyStartDebug, etc.

Code source et doc: https://github.com/akhikhl/gretty

Divulgation: Je suis l'auteur du plugin Gretty.

17
akhikhl

Le mien est une construction multi-projets et j'ai essayé:

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

Et cela n'a pas fonctionné. J'ai même essayé d'ajouter -Xnoagent au paramètre GRADLE_OPTS ci-dessus, mais cela ne faisait pas non plus de différence. De plus, le fait de définir Java_OPTS au lieu de GRADLE_OPTS n'a pas résolu le problème non plus. Ce qui a résolu le problème pour moi, c’est d’ajouter un fichier gradle.properties avec:

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

Et immédiatement je pourrais atteindre le point d'arrêt. Peut-être que les solutions mentionnées dans d'autres réponses n'ont pas fonctionné pour moi car il s'agit d'une construction multi-projets. Pas certain!

Je voulais juste fournir la solution qui a fonctionné pour moi au cas où les solutions ci-dessus ne fonctionneraient pas pour d'autres personnes.

P.S: Essayer avec gradle 1.5/1.6 et ajouter le réglage ci-dessus à gradle.properties fonctionne pour les deux versions!

5
user770119

Vous exécutez gradle en mode démon? Si j'ai bien compris, le démon exécutera alors l'instance de jetty. Par conséquent, vous devez définir les arguments JVM pour le démon. Cela devrait être possible en définissant org.gradle.jvmargs dans gradle.properties. 

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

Projet simple qui fonctionne ici en mode non démon

build.gradle:

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

src/main/Java/com/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>

Ligne de commande (en cygwin cependant):

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

Gradle se bloque alors et je peux mettre le débogueur d’Intellij sur le port 9999 et définir un point d'arrêt dans le fichier Java. Lorsque j'essaie ensuite d'ouvrir la page Web, Jetty me signale que je vais atteindre le point d'arrêt.

5
thoredge

set GRADLE_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n ne fonctionne pas pour moi aussi lorsqu'il est exécuté avec gradle jettyRunWar.

J'ai trouvé une autre solution qui fonctionne, lancez gradle jettyRunWar avec les options ci-dessous gradle -Dorg.gradle.jvmargs="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" jettyRunWar

Mais quand j'ajoute le même paramètre dans gradle.properties, cela ne fonctionne pas ... 

3
user3876447

ajoutez ceci dans le build.gradle

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

Dans mes cas, ça ne marche pas tant que je n'ai pas lancé la commande suivante .GRADLE_OPTS='-XX:MaxPermSize=256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001' gradle jettyRun

Et quand cela fonctionne, dans la console du serveur, je peux utiliser System.out.println(...) pour vérifier ce que je veux voir. En ce qui concerne le point de débogage, malheureusement, je n’ai pas trouvé de solution. Tout le monde sait comment, bienvenue pour ajouter du complément.

0
gongmingqm10

Je l'ai couru avec la propriété org.gradle.debug:

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

À ce stade, gradle se fige et attend les connexions de débogage entrantes.

J'ai ensuite créé la configuration d'exécution à distance dans IntelliJ avec la valeur "arguments de ligne de commande permettant d'exécuter une machine virtuelle Java": -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

Enfin, j'ai exécuté cette nouvelle configuration, Gradle a repris sa progression et IDE s'est arrêté au premier point d'arrêt.

0
Cyrusmith

Aussi, s'il vous plaît regardez ces deux liens du wiki officiel:

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

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

Cela peut vous aider à configurer correctement le plugin gretty pour déboguer une application jetty avec IntelliJ Idea

0
Sorokin Andrey