¿Cómo depurar un objetivo de maven con intellij idea?

99

¿Puedes depurar un objetivo experto con Intellij IDEA? Sé que puedo hacer clic derecho y ejecutar Depurar . Sin embargo, el complemento maven no aparece en mi lista de Bibliotecas externas , por lo que no puedo entrar en el código y establecer un punto de interrupción. Por lo tanto, Debug recorre los objetivos sin detenerse, como lo hace Run .

Estoy usando OS X 10.8 e IDEA 12.0.2.

EDITAR: Objetivo

Escribí specRunner personalizado para https://github.com/searls/jasmine-maven-plugin ; sin embargo, $ specs $ permanece vacío. Así que trato de ver qué archivos están cargados realmente.

rweng
fuente
2
depurar un objetivo de maven ? ¿ Cuál es ese objetivo de maven ? ¿Qué quieres lograr? y cual es tu problema real?
Alonso Dominguez
Con meta de maven me refiero a jasmine: test, o jasmine: bdd. Por lo que he visto, cada Mojo debe implementar un método execute () que me gustaría depurar. Sin embargo, como no tengo acceso al jar de IDEA, no puedo establecer un punto de interrupción.
rweng

Respuestas:

190

Lo averigué:

  1. desde la línea de comando, ejecute maven goal con en mvnDebuglugar de mvn. P.ejmvnDebug clean
  2. Abra la fuente del complemento maven que desea depurar en intelliJ y establezca un punto de interrupción
  3. En IDEA, agregue una Remoteconfiguración.
    1. En Configuración, establezca Transporte: Socket, Modo de depuración: Adjuntar, Host: localhost, Puerto: 8000 (puerto predeterminado de mvnDebug).
  4. Ejecute la configuración en modo de depuración. Debería conectarse al mvnDebug jvm en espera.
rweng
fuente
2
¿Cómo se abre la fuente del complemento maven en Intellij?
CorayThan
Creo que lo cloné de github en la versión correcta. El resto sucedió automáticamente.
rweng
3
¿Qué pasa si quiero ejecutar pruebas usando mvn test -Dtest=com.example.MyTest(mi caso de prueba falla solo cuando se ejecuta usando maven)? Los puntos de interrupción de IDEA se ignoran en este caso, parece ... :(
RobertG
2
Lo encontré: en stackoverflow.com/q/6573289/1143126 , esto es básicamente la pregunta solicitada
RobertG
Específicamente, aquí se explica cómo depurar un objetivo de maven con surefire: stackoverflow.com/a/8339155/929708
JJ Brown
40

Muy fácil. Estoy usando Intellj Idea 15.0.4

  1. Establezca el punto de interrupción en su complemento maven
  2. En la etiqueta "Proyectos Maven" vaya al proyecto que está usando su complemento Maven.
  3. En "Complementos", busque su complemento y sobre el objetivo haga clic con el botón derecho y Depurar

Aquí hay una captura de pantalla:

captura de pantalla

gorums
fuente
1
Aunque esta respuesta tiene una puntuación negativa, me ayudó a solucionar el problema que tenía (cómo depurar un proyecto basado en maven en IntelliJ), y cuando "busqué en Google" el problema me llevó a esta página.
gbmhunter
Gracias señor, su respuesta me ayudó a descubrir cómo usar los complementos de Maven automáticamente durante la ejecución en idea
Anatoly Yakimchuk
En realidad, esta es una muy buena respuesta. Para mí, definitivamente es más fácil y simple hacerlo de esta manera que configurar una depuración remota (como se sugiere en la respuesta aceptada). No estoy seguro de por qué se aceptó el otro. Quizás no funcionaría para la situación descrita en la pregunta, pero si definitivamente funcionó para mí, ¡gracias!
Chanandler Bong
2
"Establezca el punto de interrupción en su complemento maven" ¿No estoy seguro de lo que eso significa realmente? ¿Es eso diferente a poner un punto de interrupción en la propia clase Java?
Amalgovinus
"Establecer el punto de interrupción en su complemento de Maven" significa poner el punto de interrupción en su clase de complemento de
Maven
17

Antigua pregunta, pero yo tenía la misma necesidad y me tomó un tiempo hacerla funcionar. Ojalá pueda ayudar a alguien.

Para probar el uso de depuración:

mvn <goal> -Dmaven.surefire.debug 

o

mvn <goal> -Dmaven.failsafe.debug

Cuando la ejecución se detiene y escucha el socket en la dirección 5005 (predeterminado), ejecuta su depurador remoto configurado.

Cómo configurarlo:

Ejecutar -> Editar configuraciones -> Transporte remoto: socket Modo depurador: Adjuntar puerto: 5005 (predeterminado)

-> Guardar.

vilkg
fuente
10

La forma más fácil de depurar el objetivo de maven ÚNICAMENTE dentro de IntelliJ es crear un objetivo de maven regular y en la pestaña del corredor pasar esas opciones de VM:

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

Donde 8000 es un número de puerto para depuración remota.

Configuración de objetivos de Maven

Luego cree una nueva configuración remota con el puerto 8000. Ejecute esta configuración después de ejecutar maven goal.

Configuración de depuración remota

Michał Stochmal
fuente
8

Creo que la solución más fácil es agregar temporalmente el complemento maven como dependencia. Una vez hecho esto, IntelliJ lo tratará como cualquier otra dependencia y puede establecer puntos de interrupción de la forma habitual.

Peter Szanto
fuente
1
puntee esto, y en lugar de mvn use: mvnDebug ..., luego cree un depurador remoto en intellij en el puerto 8000
user85155
3

Puede consultar la respuesta anterior o simplemente agregar este complemento a 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>

Y ejecuta maven goal con en mvnlugar de mvnDebug. P.ejmvn spring-boot:run

En IDEA, agregue una configuración remota. En Configuración, establezca Transporte: Socket, Modo de depuración: Adjuntar, Host: localhost, Puerto: 8000 (puerto predeterminado de mvnDebug).

Ejecutar como depuración en IDEA, siempre que desee depurar el código.

abhishek ringsia
fuente
3
La pregunta no mencionó Spring, esta respuesta es específica de Spring
Amalgovinus
1

Dado que está trabajando con Intellij, ya hay un depurador incorporado allí y no necesita usar necesariamente mvnDebug, que es una herramienta de línea de comandos. Consulte este tutorial: Cómo depurar aplicaciones Maven en Intellij IDEA .

El tutorial usa el complemento Maven Exec y le permite depurar la aplicación sin necesidad de usar la línea de comando o MvnDebug. Pensar que podría ser valioso aquí.

ambodi
fuente
2
El tutorial solo cubre la depuración exec:java. Sin embargo, si necesita proporcionar argumentos adicionales para JVM, debe usar exec:exec(Consulte stackoverflow.com/questions/7305090/… ), que no se puede depurar de esa manera.
mirelon
0

La respuesta de @Peter Szanto funciona para mí, pero no me gusta ensuciar mi código fuente.

Y no puedo hacer MvnDebugque funcione de esa manera.

Así que lo intento de otra manera, agrego la fuente del complemento como módulo IDEA .

Aquí está el paso detallado:

  1. Clona la fuente del complemento como un proyecto independiente.

  2. En su proyecto, vaya File -> New -> Module from Exist Sourcesy agregue el proyecto de complemento que clonó en el paso 1.

  3. Ahora puede abrir el código fuente del complemento y establecer un punto de interrupción.

  4. Ejecute su objetivo de maven como modo de depuración, debería detenerse en el punto de interrupción.

user1686407
fuente