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.

55
demandé sur Daniel Serodio 2010-05-29 18:12:34

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.

27
répondu Samuel Yung 2010-05-29 14:41:52

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 .

89
répondu Pascal Thivent 2010-05-29 14:41:53

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.

17
répondu RickHigh 2013-11-14 19:35:08

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

9
répondu abhihello123 2015-08-05 07:11:34

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 Netbeans screenshot

testé sur Netbeans 7.3

7
répondu magarciaschopohl 2013-06-11 14:01:36

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.

3
répondu Brian Agnew 2015-08-20 04:42:52

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.

3
répondu flurdy 2010-07-23 14:51:05

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

3
répondu Chee Loong Soon 2017-05-23 12:18:30