how to debug maven surefire test more easily (using eclipse as debug server)
Asked Answered
B

4

28

I'm using maven / surefire / eclipse to write some code and later test / debug it.

Standard way to do it is by using maven.surefire.debug maven property. By default, when this property is enabled, maven starts listening on port 5005 and I can attach to the debugged process using remote debugger. When the test finishes remote debugger disconnects from the server.

This process involves two steps when done using in eclipse:

  1. Run maven
  2. Connect using remote launch configuration

What I would like to achieve is to reduce this to:

  1. Run maven

I have found, that setting the maven.surefire.debug property to some remote debug options will change the remote debug behaviour. Thus when I specify i.e.

-Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=5005"

then build will try to connect to my eclipse process listening on port 5005. This way I invert the default client/server roles of maven and eclipse.

However there is one big problem with this approach. It doesn't give me anything, as after maven build finishes, eclipse stops listening on server port. This is the part that I don't understand. When I connect as debug client from eclipse to for example WebLogic server, it allows me to connect / disconnect freely as many times as I want.

Anyone knows if this is normal, or maybe I need to specify some additional options to make debugging maven tests easier?

Browband answered 24/9, 2010 at 14:59 Comment(2)
This is correct behavior. WebSphere is a server so it listens to debugger continuously. Tests run and at certain moment finishes their execution (together with maven session). You can also disconnect and connect to the Maven many times but only as long as tests execution last.Pickering
@Henryk Konsek - This is why I wanted to make eclipse the server, and test engine the connect to it.Browband
M
24

Simple way:

1. Open the Debug As > .. dialogue box
2. In the goal text box, give
     -DforkMode=never test
3. Run the debug project
Mesarch answered 15/3, 2012 at 12:18 Comment(2)
I accept this answer, although this method comes with a risk (as explained here: #3186350). Debugging this way running classes will share classpath with Maven which may cause some problems.Browband
"[WARNING] The parameter forkMode is deprecated since version 2.14. Use forkCount and reuseForks instead". This is what maven says nowadays.Arriaga
F
23

Bit late in contributing but thought it was worthwhile still.

In Eclipse debug configuration, create "Maven build" debug config:

Goals = -Dmaven.surefire.debug test

Profiles = myconfigprofile,weblogic

or for a specific TestSuite:

Goals = -Dmaven.surefire.debug -Dtest=com.myorg.mypkg/MyTestSuite.java test

Profiles = myconfigprofile,weblogic

N.B. Don't put the props in "JRE/jvm arguments" as this doesn't seem to pause

Create additional "Remote Java Application" config:

Host = localhost

Port = 5005

Running/ debugging your mvn build will stop and listen on 5005 by default.

Starting your remote debug config will attach.

See also: http://maven.apache.org/plugins/maven-surefire-plugin/examples/debugging.html

Fictionist answered 18/5, 2011 at 8:43 Comment(5)
Still, I need to first run the app and then to attach to it. My question was about finding a way to do it in a one step. However I'm not sure it is possible with current Java remote debug architecture.Browband
I'm sorry. Probably a missclick. Changed to upvote now. Oh .. cannot do it now. Excuse me.Browband
No worries... was just curious.Fictionist
I get a Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.4.2:test (default-test ) on project x: There are test failures.Stanley
Have you searched for that issue? See this SO response.Fictionist
P
2

If you're using m2eclipse, why not simply right-click then Debug > Maven test?

Phlegm answered 24/9, 2010 at 17:1 Comment(3)
I have tried, but it doesn't do anything. Do I need anything to configure it?Browband
On the other hand "debug as junit test" works fine. Actualy this is enough fo me.Browband
Debug > Maven test really doesn't do anything. The mateusz.fiolka's way seems to be the only one working for me and running test and then launch remote debugger is really annoyingEducable
L
0

if you are using Maven 2.0.8+, then it will be very simple,

Please refer my answer.

Maven build debug in Eclipse

Locution answered 24/9, 2010 at 15:0 Comment(1)
Nope, it's still two steps - run from console, run from eclipse.Browband

© 2022 - 2024 — McMap. All rights reserved.