Debugando uma aplicação Maven com o Eclipse
Este blog deixou de ser mantido, mas o autor continua escrevendo aqui. Não deixe de assinar o novo feed!
Se você já teve que debugar um Test Case de uma aplicação Maven, então é bem provável que você tenha perdido minutos (horas?) tentando decifrar a documentação disponível na Internet, documentação esta que mais parece a tradução de Aramaico para Inglês do Google. Pois bem… até alguns dias atrás, eu pensava que debugar uma aplicação Maven dentro do Eclipse fosse tão simples quanto pressionar um botão (o de debug no caso)
, mas hoje sei que não é bem assim. Como devem existir outras pessoas com as mesmas dúvidas, então decidi escrever sobre isso hoje.
Eu estou desenvolvendo um projeto pessoal em Struts 2 + JPA + Spring 2.0 com a finalidade de aprender um pouco sobre as mudanças que houveram no antigo WebWork (e agora Struts 2) e como fazer para integrar ele com todo o resto. Nada de mais, provavelmente este será outro projeto daqueles que eu não irei terminar.
Continuando, para que eu não precisasse me preocupar em configurar as dependências dos frameworks manualmente (e suas dependências, e as dependências de suas dependências etc), nada melhor que utilizar o Maven. Como o próprio Struts 2 fornece um archetype, então é bem simples criar um novo projeto:
mvn archetype:create -DgroupId=tutorial \ > -DartifactId=tutorial \ > -DarchetypeGroupId=org.apache.struts \ > -DarchetypeArtifactId=struts2-archetype-starter \ > -DarchetypeVersion=2.0.5-SNAPSHOT \ > -DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository [INFO] Scanning for projects... ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------
Depois que criei o projeto, limpei o lixo excesso, configurei e integrei toda a tralha, eis que chega a hora de começar a desenvolver. Ótimo… chega de configurações! Depois de algum tempo programando, tudo sob controle. Quer dizer, tudo estava sob controle… maldita hora que resolvi debugar um Test Case JUnit!
O Maven utiliza o plugin Surefire para executar os testes unitários (JUnit ou TestNG). Como este plugin roda os testes em uma JVM separada, precisamos fazer algumas gambiarras configurações no Eclipse para que possamos “atachar” o debugger nessa JVM, possibilitando o debug da aplicação.
Executando o Maven em “modo de debug”
Veja a screenshot:
Aqui, configuramos um programa na janela External Tools do Eclipse. No caso, o programa a ser executado é o próprio Maven e ele deverá rodar no contexto do projeto indicado no campo Working Directory. Adicionamos também o argumento maven.surefire.debug, que indica que o Maven deve fornecer uma porta na qual um debugger qualquer possa se conectar para fazer seu trabalho.
Ao rodar esse perfil, temos a seguinte resposta no Console:
[INFO] Scanning for projects... [INFO] ---------------------------------------------------------------------------- [INFO] Building Blog [INFO] task-segment: [test] [INFO] ---------------------------------------------------------------------------- [INFO] [resources:resources] ... [INFO] [surefire:test] [INFO] Surefire report directory: /home/daniel/Java/Workspaces/Eclipse/JavaEE/blog/target/surefire-reports Listening for transport dt_socket at address: 5005
Configurando o debugger
Nos resta agora configurar o Eclipse para “atachar” o debugger na porta fornecida pelo Maven:
Como podemos ver na imagem, nós simplesmente indicamos que o debugger do Eclipse deve se conectar na porta aberta pelo Maven, no passo anterior (localhost:5005).
Tudo pronto! Agora, tudo o que você deve fazer para debugar seus testes unitários:
- Rodar o perfil External Tool definido no primeiro passo. Isso irá fazer com que o Maven espere pela conexão do debugger; e
- Rodar a configuração de debug definida no segundo passo. Então, uma vez que a conexão entre o debugger e a JVM do Maven seja estabelecida, o Maven prossegue com a execução dos testes, pausando a execução quando um breakpoint for alcançado. (você pode debugar a aplicação normalmente)
Se você ainda está com problemas para debugar sua aplicação Maven (mesmo após seguir os passos aqui descritos), então tente isto. É trabalhoso, mas sempre funciona!
Brincadeira! Qualquer problema ou dúvida, é só deixar um comentário a respeito que tentarei ajudar no que for possível.
Foto por: nutmeg66
Tags: debugging, dicas, eclipse, junit, maven, plugin, surefire, tutorial

21 de junho de 2007 às 11:16 am
Olá Daniel
o google me forneceu esse seu link sobre debug com maven
eu tenho uma aplicação q to fazendo com maven + eclipse + tomcat e gostaria de debugar ela
Fiz as configurações seguindo as orientações acima, mas to com umas dúvidas, vc pode me ajudar ?
Cordialmente,
Érico
21 de junho de 2007 às 11:27 am
Este post trata sobre como debugar um test case no Maven, o que é complicado visto que o plugin Surefire roda os testes em uma VM separada. Por isso que foi necessário fazer tudo o que foi mostrado aqui.
Para se debugar uma aplicação rodando no Tomcat, acredito que não haja muitos problemas não. Tente, após o deploy, rodar o Tomcat em modo de debug através do WTP.