Débogage dans Maven?
est-il possible de lancer un débogueur tel que jdb à partir de Maven? J'ai un pom.fichier xml qui compile le projet avec succès. Cependant, le programme est quelque part et j'aimerais vraiment lancer jdb ou un débogueur équivalent pour voir ce qui se passe.
Je compilerai en utilisant mvn compile
et lancerai en utilisant:
mvn exec:java -Dexec.mainClass="com.mycompany.app.App"
Je m'attendais à quelque chose comme:
mvn exec:jdb -Dexec.mainClass="com.mycompany.app.App"
pour lancer le debugger mais, comme d'habitude, mes attentes sont incompatibles avec la philosophie de maven.
en outre, Je ne pouvais pas trouver de documentation (sur le site Web de Maven ou google) pour décrire comment le débogage fonctionne. Je soupçonne que je dois utiliser un plug-in.
8 réponses
comme Brian l'a dit, Vous pouvez utiliser le débogage à distance:
mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 com.mycompany.app.App"
puis dans votre eclipse, vous pouvez utiliser le débogage à distance et attacher le débogueur à localhost:1044.
si vous utilisez Maven 2.0.8+, exécutez la commande mvnDebug
à la place de mvn
et attachez un débogueur sur le port 8000.
Pour Maven <2.0.8, décommentez la ligne suivante dans votre %M2_HOME%/bin/mvn.bat
(et peut-être d'enregistrer la version modifiée comme mvnDebug.bat
):
@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
Plus de détails dans MNG-2105 et Traiter avec Eclipse IDE .
j'ai pensé que je voudrais développer ces réponses pour les gens D'OSX et Linux (pas qu'ils en aient besoin):
je préfère utiliser mvnDebug aussi. Mais après OSX maverick a détruit mon environnement Java dev, je suis parti de zéro et je me suis entêté sur ce post, et j'ai pensé que je voudrais ajouter à cela.
$ mvnDebug vertx:runMod
-bash: mvnDebug: command not found
DOH! Je ne l'ai pas mis en place sur cette boîte après le nouveau lecteur SSD et/ou la réinitialisation de tout Java lorsque j'ai installé Conformiste.
j'utilise un gestionnaire de paquets pour OSX et Linux donc je n'ai aucune idée de l'endroit où mvn vit vraiment. (Je sais que pour de brèves périodes de temps.. grâce au brassage.. J'aime le fait que je ne sais pas ce.)
Voyons voir:
$ which mvn
/usr/local/bin/mvn
vous voilà... vous avez peu de b@stard.
maintenant Où avez-vous été installé pour:
$ ls -l /usr/local/bin/mvn
lrwxr-xr-x 1 root wheel 39 Oct 31 13:00 /
/usr/local/bin/mvn -> /usr/local/Cellar/maven30/3.0.5/bin/mvn
Aha! Si vous avez installé dans /usr/local/Cave/maven30/3.0.5/bin/mvn. Vous petit outil de construction effronté. Sans doute par homebrew...
avez-vous votre petit ami mvnDebug avec vous?
$ ls /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug
/usr/local/Cellar/maven30/3.0.5/bin/mvnDebug
bien. Bon. Très bon. Tout ce passe comme prévu.
maintenant déplace ce petit b@stard où je peux me souvenir de lui plus facilement.
$ ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug
ln: /usr/local/bin/mvnDebug: Permission denied
fichtre ordinateur... Vous soumettre à ma volonté. Savez-vous qui je suis? Je suis SUDO! BOW!
$ sudo ln -s /usr/local/Cellar/maven30/3.0.5/bin/mvnDebug /usr/local/bin/mvnDebug
Password:
maintenant je peux l'utiliser de L'éclipse (mais pourquoi ferais-je cela quand J'ai IntelliJ!!!!)
$ mvnDebug vertx:runMod
Preparing to Execute Maven in Debug Mode
Listening for transport dt_socket at address: 8000
en Interne mvnDebug utilise ceci:
MAVEN_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE \
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"
pour que vous puissiez le modifier (je débogue habituellement sur le port 9090).
ce blog explique comment configurer le débogage à distance Eclipse (shudder)
http://javarevisited.blogspot.com/2011/02/how-to-setup-remote-debugging-in.html
Idem Netbeans
https://blogs.oracle.com/atishay/entry/use_netbeans_to_debug_a
Idem IntelliJ http://www.jetbrains.com/idea/webhelp/run-debug-configuration-remote.html
voici quelques bons docs sur la commande-Xdebug en général.
http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
" - Xdebug permet des capacités de débogage dans la JVM qui sont utilisées par L'Interface Java Virtual Machine Tools (Jvmti). JVMTI est une interface de débogage de bas niveau utilisée par les débogueurs et les outils de profilage. Avec elle, vous pouvez inspecter l'état et contrôler l'exécution des applications en cours d'exécution dans la JVM."
"Le sous-ensemble de JVMTI qui est le plus généralement utilisé par les profileurs est toujours disponible. Cependant, la fonctionnalité utilisée par les débogueurs pour pouvoir à travers le code et les points d'arrêt de jeu a un certain plafond associé à elle et n'est pas toujours disponible. Pour activer cette fonctionnalité, vous devez utiliser l'option-Xdebug."
-Xrunjdwp:transport=dt_socket,serveur=y,suspendre=n myApp
consultez aussi le docs on-Xrunjdwp. Vous pouvez l'activer uniquement lorsqu'une exception est levée par exemple. Vous pouvez le démarrer suspendu ou en cours d'exécution. De toute façon.. Je m'éloigne du sujet.
j'ai trouvé un moyen facile de le faire -
entrez juste une commande comme celle - ci -
>mvn -Dtest=TestClassName#methodname -Dmaven.surefire.debug test
il va commencer à écouter le port 5005. Il suffit maintenant de créer un débogage à distance dans Eclipse à travers les Configurations de débogage pour localhost(n'importe quel hôte) et le port 5005.
à la Source https://doc.nuxeo.com/display/CORG/How+à+Debug+une+Test+Run+avec+Maven
si vous utilisez Netbeans, il y a un raccourci agréable pour cela.
Il suffit de définir un objectif exec:java
et ajouter la propriété jpda.listen=maven
testé sur Netbeans 7.3
pourquoi ne pas utiliser le JPDA et le joindre au processus lancé à partir d'un processus de débogage séparé ? Vous devriez être en mesure de spécifier les options appropriées dans Maven pour lancer votre processus de débogage crochets activés. cet article contient plus d'informations.
j'utilise L'option MAVEN_OPTS, et je trouve utile de définir suspend à" suspend=y " car mes programmes exec:java ont tendance à être de petits générateurs qui sont finis avant que j'aie réussi à fixer un débogueur.... :) Avec les suspendre sur il va attendre un débogueur pour attacher avant de commencer.
si vous ne voulez pas être dépendant D'IDE et que vous voulez travailler directement avec la ligne de commande, vous pouvez utiliser 'JDB' (Java Debugger)
comme mentionné par Samuel avec une petite modification (set suspend=y au lieu de suspend=n, y signifie Oui ce qui suspend le programme et ne l'exécute pas de sorte que vous qui pouvez définir des points de rupture pour le déboguer, si suspend=n signifie qu'il peut exécuter le programme jusqu'à son achèvement avant même que vous puissiez le déboguer)
Sur le répertoire qui contient votre POM.xml, exécuter:
mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044 com.mycompany.app.App"
Ensuite, ouvrez un nouveau terminal et exécutez:
jdb -attach 1044
vous pouvez alors utiliser jdb pour déboguer votre programme!= )
Sources: Java jdb débogage distant outil de ligne de commande