web-dev-qa-db-fra.com

Déboguer dans Maven?

Est-il possible de lancer un débogueur tel que jdb de Maven? J'ai un pom.xml fichier qui compile le projet avec succès. Cependant, le programme se bloque quelque part et je voudrais vraiment lancer jdb ou un débogueur équivalent pour voir ce qui se passe.

Je compile en utilisant mvn compile et lancez 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"

lancer le débogueur mais, comme d'habitude, mes attentes sont incohérentes avec la philosophie de maven.

De plus, je n'ai trouvé aucune documentation (sur le site Web de Maven ou sur Google) décrivant le fonctionnement du débogage. Je soupçonne que je dois utiliser un plugin.

60
aduric

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"

Ensuite, dans votre Eclipse, vous pouvez utiliser le débogage distant et associer le débogueur à localhost: 1044.

32
Samuel Yung

Si vous utilisez Maven 2.0.8+, exécutez la commande mvnDebug à la place de mvn et connectez 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 enregistrer la version modifiée sous le nom 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 Traitement de l'IDE basé sur Eclipse .

100
Pascal Thivent

J'ai trouvé un moyen facile de le faire -

Il suffit d'entrer une commande comme celle-ci -

>mvn -Dtest=TestClassName#methodname -Dmaven.surefire.debug test

Il va commencer à écouter le port 5005. Créez maintenant un débogage distant dans Eclipse via les configurations de débogage pour localhost (n'importe quel hôte) et le port 5005.

Source - https://doc.nuxeo.com/display/CORG/How+to+Debug+a+Test+Run+with+Maven

13
abhihello123

Si vous utilisez Netbeans, il existe un raccourci agréable à cela. Il suffit de définir un objectif exec:Java et ajoutez la propriété jpda.listen=maven Netbeans screenshot

Testé sur Netbeans 7.3

8
magarciaschopohl

Si vous ne voulez pas être IDE et voulez travailler directement avec la ligne de commande, vous pouvez utiliser 'jdb' (Java Debugger)

Comme mentionné par Samuel avec une petite modification (définir suspendre = y au lieu de suspendre = n, y signifie oui qui suspend le programme et ne l'exécute pas afin que vous puissiez définir des points d'arrêt pour le déboguer, si suspendre = n signifie qu'il peut exécuter le programme achèvement avant même de pouvoir le déboguer)

Sur le répertoire qui contient votre pom.xml, exécutez:

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 ensuite utiliser jdb pour déboguer votre programme! =)

Sources: outil de ligne de commande de débogage distant Java jdb

4
Chee Loong Soon

Pourquoi ne pas utiliser le JPDA et l’attacher au processus lancé à partir d’un processus de débogage distinct? Vous devriez pouvoir spécifier les options appropriées dans Maven pour lancer votre processus avec les points d'ancrage de débogage activés. Cet article a plus d'informations.

3
Brian Agnew

J'utilise l'option MAVEN_OPTS et trouve utile de définir susp en tant que mon exec: "suspendre = y": les programmes Java ont tendance à être de petits générateurs qui sont terminés avant d'avoir réussi à attacher un débogueur .... :) Avec suspendre il attendra qu'un débogueur soit attaché avant de procéder.

3
flurdy