Como depurar um objetivo maven com a ideia intellij?

100

Você pode depurar uma meta maven com Intellij IDEA? Eu sei que posso clicar com o botão direito e executar o Debug . No entanto, o plugin maven não aparece na minha lista de Bibliotecas externas , então não posso entrar no código e definir um ponto de interrupção. Assim, Debug percorre as metas sem parar, como Run faz.

Estou usando o OS X 10.8 e o IDEA 12.0.2.

EDIT: objetivo

Eu escrevi specRunner customizado para https://github.com/searls/jasmine-maven-plugin - No entanto, $ specs $ permanece vazio. Então, tento ver quais arquivos estão realmente carregados.

Rweng
fonte
2
depurar um objetivo do maven ? qual é o objetivo do maven ? O que você quer alcançar? e qual é o seu problema real?
Alonso Dominguez
Com objetivo maven, quero dizer jasmim: teste ou jasmim: bdd. Pelo que eu vi, cada Mojo deve implementar um método execute () que eu gostaria de depurar. No entanto, como não tenho acesso ao jar do IDEA, não posso definir um ponto de interrupção.
rweng

Respostas:

190

Descobri:

  1. na linha de comando, execute maven goal com em mvnDebugvez de mvn. Por exemplomvnDebug clean
  2. Abra a fonte do plugin maven que deseja depurar no intelliJ e defina um ponto de interrupção
  3. Em IDEA, adicione uma Remoteconfiguração.
    1. Em Configurações, defina Transporte: Soquete, Modo de depurador: Anexar, Host: localhost, Porta: 8000 (porta padrão de mvnDebug).
  4. Execute a configuração no modo de depuração. Ele deve se conectar ao jvm mvnDebug em espera.
Rweng
fonte
2
Como você abre o código-fonte do plugin maven no Intellij?
CorayThan
Acho que clonei do github na versão correta. O resto aconteceu automaticamente.
rweng
3
E se eu quiser executar testes usando mvn test -Dtest=com.example.MyTest(meu caso de teste falha apenas quando executado usando maven) - pontos de interrupção IDEA são ignorados neste caso, parece ... :(
RobertG
2
Encontrei: em stackoverflow.com/q/6573289/1143126 , basicamente a pergunta feita
RobertG
Especificamente, aqui está como depurar um objetivo maven com surefire: stackoverflow.com/a/8339155/929708
JJ Brown
40

Muito fácil. Estou usando o Intellj Idea 15.0.4

  1. Defina o ponto de interrupção no seu plugin maven
  2. Na tag "Projetos Maven" vá até o projeto que está usando seu plugin maven.
  3. Em "Plugins" encontre seu plugin e sobre o objetivo clique com o botão direito e depure

Aqui está uma captura de tela:

captura de tela

gorums
fonte
1
Embora essa resposta tenha uma pontuação negativa, ela me ajudou a corrigir o problema que eu tive (como depurar um projeto baseado em maven no IntelliJ) e, ao "pesquisar no Google" o problema, me levou a esta página.
gbmhunter
Obrigado, senhor, sua resposta me ajudou a descobrir como usar os plug-ins maven automaticamente durante a execução da ideia
Anatoly Yakimchuk
Na verdade, esta é uma resposta muito boa. Para mim, é definitivamente mais fácil e simples fazer dessa maneira do que configurar uma depuração remota (como sugerido na resposta aceita). Não sei por que o outro foi aceito. Talvez não funcione para a situação descrita na pergunta, mas se definitivamente funcionou para mim, então obrigado!
Chanandler Bong
2
"Defina o ponto de interrupção em seu plug-in maven" Não tenho certeza do que isso realmente significa? Isso é diferente de colocar um ponto de interrupção na própria classe java?
Amalgovinus
"Definir o ponto de interrupção em seu plugin maven" significa colocar o ponto de interrupção em sua classe de plugin maven
gorums
17

Pergunta antiga, mas eu estava tendo a mesma necessidade e demorei um pouco para fazê-la funcionar. Espero que possa ajudar alguém.

Para teste de depuração, use:

mvn <goal> -Dmaven.surefire.debug 

ou

mvn <goal> -Dmaven.failsafe.debug

Quando a execução para e escuta o soquete no endereço 5005 (padrão), você executa o depurador remoto configurado.

Como configurá-lo:

Executar -> Editar configurações -> Transporte remoto: modo de depurador de soquete: Porta de conexão: 5005 (padrão)

-> Salvar.

vilkg
fonte
10

A maneira mais fácil de depurar o objetivo do maven SOMENTE no IntelliJ é criar um objetivo do maven regular e, na guia runner, passar essas opções de VM:

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

Onde 8000 é um número de porta para depuração remota.

Configuração de metas Maven

Em seguida, crie uma nova configuração remota com a porta 8000. Execute esta configuração após executar o objetivo do maven.

Configuração de depuração remota

Michał Stochmal
fonte
8

Acho que a solução mais fácil é adicionar temporariamente o plugin maven como uma dependência. Uma vez feito isso, o IntelliJ tratará isso como qualquer outra dependência e você pode definir pontos de interrupção da maneira usual.

Peter Szanto
fonte
1
pontilhe isso e, em vez de mvn, use: mvnDebug ..., em seguida, crie um executor de depuração remoto no intellij na porta 8000
user85155
3

Você pode consultar a resposta acima Ou apenas adicionar este plugin 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>

E execute maven goal com em mvnvez de mvnDebug. Por exemplomvn spring-boot:run

No IDEA, adicione uma configuração remota. Em Configurações, defina Transporte: Soquete, Modo de depurador: Anexar, Host: localhost, Porta: 8000 (porta padrão de mvnDebug).

Execute como Debug no IDEA, sempre que quiser depurar o código.

Abhishek Ringia
fonte
3
A pergunta não mencionou a primavera, esta resposta é específica da primavera
Amalgovinus
1

Uma vez que você está trabalhando com o Intellij, já existe um depurador embutido e você não precisa necessariamente usar o mvnDebug, que é uma ferramenta de linha de comando. Confira este tutorial: Como depurar aplicativos Maven no Intellij IDEA .

O tutorial usa o Maven Exec Plugin e permite depurar o aplicativo sem a necessidade de usar a linha de comando ou MvnDebug. Compartilhamento de pensamentos pode ser valioso aqui.

ambodi
fonte
2
O tutorial cobre apenas a depuração exec:java. No entanto, se você precisar fornecer argumentos adicionais para JVM, você precisa usar exec:exec(Consulte stackoverflow.com/questions/7305090/… ), que não pode ser depurado dessa forma.
mirelon
0

A resposta de @Peter Szanto funciona para mim, mas não gosto de bagunçar meu código-fonte.

E eu não consigo fazer isso MvnDebugfuncionar.

Então, tento outra maneira, adicionar a fonte do plugin como módulo IDEA .

Aqui está a etapa de detalhe:

  1. Clone a fonte do plugin como um projeto independente.

  2. Em seu projeto, acesse File -> New -> Module from Exist Sourcese adicione o projeto de plug-in que você clonou na etapa 1.

  3. Agora você pode abrir o código-fonte do plugin e definir algum ponto de interrupção.

  4. Execute seu objetivo maven como modo de depuração, ele deve parar no ponto de interrupção.

user1686407
fonte