Comment déboguer un objectif maven avec une idée intellij?

100

Pouvez-vous déboguer un objectif maven avec Intellij IDEA? Je sais que je peux cliquer avec le bouton droit et exécuter Debug . Cependant, le plugin maven n'apparaît pas dans ma liste de bibliothèques externes , je ne peux donc pas entrer dans le code et définir un point d'arrêt. Ainsi, Debug parcourt les objectifs sans s'arrêter, comme le fait Run .

J'utilise OS X 10.8 et IDEA 12.0.2.

EDIT: Objectif

J'ai écrit specRunner personnalisé pour https://github.com/searls/jasmine-maven-plugin - Cependant, $ specs $ reste vide. J'essaye donc de voir quels fichiers sont réellement chargés.

rweng
la source
2
déboguer un objectif maven ? quel est ce but maven ? Que veux-tu accomplir? et quel est votre problème réel?
Alonso Dominguez
Avec maven goal, je veux dire jasmin: test ou jasmin: bdd. Pour autant que je l'ai vu, chaque Mojo doit implémenter une méthode execute () que j'aimerais déboguer. Cependant, comme je n'ai pas accès au pot d'IDEA, je ne peux pas définir de point d'arrêt.
rweng

Réponses:

190

Deviner:

  1. à partir de la ligne de commande, exécutez maven goal avec mvnDebugau lieu de mvn. Par exemplemvnDebug clean
  2. Ouvrez la source du plugin maven que vous souhaitez déboguer dans intelliJ et définissez un point d'arrêt
  3. Dans IDEA, ajoutez une Remoteconfiguration.
    1. Sous Paramètres, définissez Transport: Socket, Mode débogueur: Attacher, Hôte: localhost, Port: 8000 (port par défaut de mvnDebug).
  4. Exécutez la configuration en mode débogage. Il doit se connecter au jvm mvnDebug en attente.
rweng
la source
2
Comment ouvrir la source du plugin maven dans Intellij?
Coray du
Je pense que je l'ai cloné à partir de github dans la bonne version. Le reste est arrivé automatiquement.
rweng
3
Que faire si je veux exécuter des tests en utilisant mvn test -Dtest=com.example.MyTest(mon cas de test échoue uniquement lorsqu'il est exécuté avec maven) - Les points d'arrêt IDEA sont ignorés dans ce cas, il semble ... :(
RobertG
2
Trouvé: Dans stackoverflow.com/q/6573289/1143126 , c'est essentiellement le qustion demandé
RobertG
Plus précisément, voici comment déboguer un objectif maven avec surefire: stackoverflow.com/a/8339155/929708
JJ Brown
40

Très facile. J'utilise Intellj Idea 15.0.4

  1. Définissez le point d'arrêt dans votre plugin maven
  2. Dans la balise "Projets Maven", allez sur le projet qui utilise votre plugin maven.
  3. Dans "Plugins", trouvez votre plugin et sur l'objectif, faites un clic droit et Déboguer

Voici une capture d'écran:

capture d'écran

gorums
la source
1
Bien que cette réponse ait un score négatif, elle m'a aidé à résoudre le problème que j'avais (comment déboguer un projet basé sur maven dans IntelliJ), et lorsque "googler" le problème, cela m'a conduit à cette page.
gbmhunter
Merci monsieur, votre réponse m'a aidé à comprendre comment utiliser automatiquement les plugins maven pendant l'exécution dans idea
Anatoly Yakimchuk
C'est en fait une très bonne réponse. Pour moi, c'est définitivement plus facile et plus simple de le faire de cette façon que de configurer un débogage à distance (comme suggéré dans la réponse acceptée). Je ne sais pas pourquoi l'autre a été accepté. Peut-être que cela ne fonctionnerait pas pour la situation décrite dans la question, mais si cela fonctionnait vraiment pour moi, alors merci!
Chanandler Bong
2
"Définissez le point d'arrêt dans votre plugin maven" Je ne suis pas sûr de ce que cela signifie réellement? Est-ce différent de mettre un point d'arrêt dans la classe java elle-même?
Amalgovinus
"Définissez le point d'arrêt dans votre plugin maven" signifie mettre le point d'arrêt dans votre classe de plugin
maven
17

Ancienne question, mais j'avais le même besoin et il m'a fallu du temps pour que ça marche. J'espère pouvoir aider quelqu'un.

Pour le débogage de test, utilisez:

mvn <goal> -Dmaven.surefire.debug 

ou

mvn <goal> -Dmaven.failsafe.debug

Lorsque l'exécution s'arrête et écoute le socket à l'adresse 5005 (par défaut), vous exécutez votre débogueur distant configuré.

Comment le configurer:

Exécuter -> Modifier les configurations -> Transport à distance: mode débogueur de socket: Attacher le port: 5005 (par défaut)

-> Enregistrer.

vilkg
la source
10

Le moyen le plus simple de déboguer un objectif maven UNIQUEMENT dans IntelliJ est de créer un objectif maven régulier et dans l'onglet Runner, passez ces options de VM:

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

Où 8000 est un numéro de port pour le débogage à distance.

Configuration des objectifs Maven

Créez ensuite une nouvelle configuration distante avec le port 8000. Exécutez cette configuration après avoir exécuté maven goal.

Configuration de débogage à distance

Michał Stochmal
la source
8

Je pense que la solution la plus simple est d'ajouter temporairement le plugin maven en tant que dépendance. Une fois que cela est fait, IntelliJ traitera cela comme n'importe quelle autre dépendance et vous pouvez définir des points d'arrêt de la manière habituelle.

Peter Szanto
la source
1
dot ceci, et au lieu de mvn, utilisez: mvnDebug ..., puis créez un runner de débogage distant dans intellij sur le port 8000
user85155
3

Soit vous pouvez vous référer à la réponse ci-dessus, soit simplement ajouter ce plugin à pom.xml

           <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
            <jvmArguments>
            -Xdebug - 
            Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
            </jvmArguments>
            </configuration>
        </plugin>

Et exécutez le but maven avec mvnau lieu de mvnDebug. Par exemplemvn spring-boot:run

Dans IDEA, ajoutez une configuration à distance. Sous Paramètres, définissez Transport: Socket, Mode débogueur: Attacher, Hôte: localhost, Port: 8000 (port par défaut de mvnDebug).

Exécutez en tant que débogage dans IDEA, chaque fois que vous souhaitez déboguer le code.

abhishek ringsia
la source
3
La question ne mentionnait pas le printemps, cette réponse est spécifique au printemps
Amalgovinus
1

Puisque vous travaillez avec Intellij, il existe déjà un débogueur intégré et vous n'avez pas nécessairement besoin d'utiliser mvnDebug qui est un outil de ligne de commande. Consultez ce tutoriel: Comment déboguer des applications Maven dans Intellij IDEA .

Le tutoriel utilise le plugin Maven Exec et vous permet de déboguer l'application sans avoir besoin d'utiliser la ligne de commande ou MvnDebug. La pensée de partager cela pourrait être utile ici.

ambodi
la source
2
Le didacticiel ne couvre que le débogage exec:java. Cependant, si vous devez fournir des arguments supplémentaires pour JVM, vous devez utiliser exec:exec(voir stackoverflow.com/questions/7305090/… ), qui ne peut pas être débogué de cette façon.
mirelon
0

La réponse de @Peter Szanto fonctionne pour moi, mais je n'aime pas gâcher mon code source.

Et je ne peux pas faire fonctionner ces MvnDebugméthodes.

J'essaye donc d'une autre manière, d' ajouter la source du plugin en tant que module IDEA .

Voici l'étape de détail:

  1. Clonez la source du plugin en tant que projet indépendant.

  2. Dans votre projet, accédez à File -> New -> Module from Exist Sourceset ajoutez le projet de plugin que vous clonez à l'étape 1.

  3. Vous pouvez maintenant ouvrir le code source du plugin et définir un point d'arrêt.

  4. Exécutez votre objectif maven en mode débogage, il devrait s'arrêter au point d'arrêt.

user1686407
la source