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 gradle et java opte pour:
-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n
...mais il ne semble pas fonctionner.
Je suis capable de faire fonctionner ma propre installation de jetty, mais pas via gradle (jettyRun ou jettyRunWar).
Cordialement.
9 réponses
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
Essayez d'utiliser le plugin Gretty, il a fourni des tâches gradle jettyRunDebug, jettyStartDebug etc.
Code Source et doc: https://github.com/akhikhl/gretty
Divulgation: je suis l'auteur du plugin Gretty.
Utilisez-vous gradle en mode démon? Si je comprends bien, le démon exécutera alors l'instance jetty. Par conséquent, vous devrez définir les arguments JVM pour le démon. Cela devrait être possible en définissant l'organisation.gradle.jvmargs dans gradle.propriété.
Simplement un projet qui fonctionne ici dans non-daemon en mode
Construire.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 (dans 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. Quand j'essaie alors d'ouvrir la page Web jetty m'informe que je vais atteindre le point d'arrêt.
Le mien est une construction gradle multi-projet 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 n'a pas non plus fait de différence. En outre, définir JAVA_OPTS au lieu de GRADLE_OPTS n'a pas non plus résolu le problème. Ce qui a résolu le problème pour moi était d'ajouter un gradle.propriétés avec:
org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5005,suspend=y
Et immédiatement je pouvais atteindre le point d'arrêt. Peut-être des solutions mentionnées dans d'autres réponses n'ont pas fonctionné pour moi parce que c'est un construction multi-projet. Pas sûr!
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.
PS: essayé avec gradle 1.5 / 1.6 et en ajoutant le paramètre ci-dessus à gradle.propriétés fonctionne pour les deux versions!
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, exécutez 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.propriétés, il ne fonctionne pas...
Ajoutez ceci dans la construction.gradle
jettyRun {
jvmArgs '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
}
Im mes cas, cela ne fonctionne pas jusqu'à ce que j'exécute la commande suivante.
GRADLE_OPTS='-XX:MaxPermSize=256M -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4001' gradle jettyRun
Et quand il fonctionne, dans la console du serveur, je peux utiliser System.out.println(...)
pour inspecter ce que je veux voir. En ce qui concerne le débogage de point d'arrêt, malheureusement, je n'ai pas trouvé de moyen. Tout le monde sait comment, bienvenue à ajouter un complément.
Aussi, veuillez regarder ces deux liens du wiki officiel:
Https://github.com/akhikhl/gretty/issues/36
Http://akhikhl.github.io/gretty-doc/Debugger-support.html
Il peut vous aider à configurer correctement le plugin gretty pour déboguer l'application jetty avec IntelliJ Idea
Je l'ai couru avec org.gradle.debug
propriété:
./gradlew -Dorg.gradle.debug=true jettyRun
À ce stade, gradle gèle et attend les connexions de débogage entrantes.
Ensuite, j'ai créé la configuration D'exécution à distance dans IntelliJ avec la valeur de "arguments de ligne de commande pour exécuter la JVM distante" pour être
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Enfin, j'ai couru cette nouvelle configuration, gradle a repris la progression et IDE arrêté au premier point d'arrêt.