12

I've not built a Java web application before, but I have it complete enough to test and Maven is building my WAR file just fine. It is a multi-module Maven project and the dependent modules all have their JAR files in the WEB-INF/lib directory of the WAR.

So everything seems fine, but how to debug? I know how to (from the command line) run the WAR in Tomcat on my machine. I also think I know how to set up and run the Maven Jetty plugin from the command line as well. But how best to debug...with all the break points and variable inspection I love with Eclipse?

Is there some kind of launch configuration I should create, or do I attach the debugger remotely? Is there something in Eclipse that can help...like a plugin?

Pascal Thivent
  • 562,542
  • 136
  • 1,062
  • 1,124
Dave
  • 21,524
  • 28
  • 141
  • 221

4 Answers4

22

If you run your WAR with tomcat/jetty plugin pass debug options to the Maven:

export MAVEN_OPTS="-Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" mvn tomcat:run

If you run your WAR using the regular Tomcat, just run it with JPDA (debugger) support enabled:

$TOMCAT_HOME/bin/catalina.sh jpda start

Default port for Tomcat 6 JPDA is 8000.

Now connect with the Eclipse (Debug -> Remote Java Application) to the port 8000 and enjoy your fine debugging session.

Henryk Konsek
  • 9,016
  • 5
  • 32
  • 41
4

To enable debugging through eclipse :

I pass following to Tomcat startup:

-Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=9999,suspend=n

Then through Eclipse do Remote Debug.

  • Goto Debug Menu > Debug Configuration

  • Scroll Down to Select Remote Java Application

  • rt click to create new
    configuration
  • Select connection type as Standard (Socket Attach) and add hostname and port.

To start debugging simple open it when server is running.---

YoK
  • 14,329
  • 4
  • 49
  • 67
3

A better way of adding the debugging options to $MAVEN_OPTS option, and thus not merging them with the other existing options (if you want to start your app not in the debug mode, you have to remove those options again), is to use the Maven out of the box debugger mvnDebug, located in its bin directory, this way mvnDebug jetty:run. This will execute your app in debug mode and what's remaining is attaching your debugger.

ahmehri
  • 756
  • 2
  • 8
  • 26
  • I was unaware of `mvnDebug` is there an easy way to launch that from Eclipse as part of a Maven launch configuration? – Dave Dec 13 '13 at 18:44
  • If you're going to use mvnDebug, then it should be from the command line not from Eclipse (though detaching the debugger can be from Eclipse). – ahmehri Sep 10 '14 at 10:20
3

Is there some kind of launch configuration I should create, or do I attach the debugger remotely? Is there something in Eclipse that can help...like a plugin?

With m2eclipse (and the Maven Integration for WTP that you install from the Extras), you could use the WTP and start your app in debug mode.

As an alternative, you could connect a remote debugger to a Jetty. See Debugging with the Maven Jetty Plugin in Eclipse.

Pascal Thivent
  • 562,542
  • 136
  • 1,062
  • 1,124