首先,maven debug配置,请参看:http://maven.apache.org/surefire/maven-surefire-plugin/examples/debugging.html
下面,请看我的实际操作:
一、以tomcat作为容器
以tomcat容器为例,其配置方式有3种:
首先,maven项目的pom.xml文件中,在<build>的<plugins>下边应该配置tomcat7-maven-plugin插件,如下:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- http port -->
<port>8080</port>
<!-- application path always starts with / -->
<path>/test</path>
</configuration>
</plugin>
(1)方式一
a. 打开cmd命令行,在Maven命令执行前加入一行参数:
| export MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y |
以上内容可以在maven的安装目录的bin\mavenDebug.bat文件中找到。(搜索debug即可)
下面是命令的详细解释:
-XDebug 启用调试
-Xrunjdwp 加载JDWP的JPDA参考执行实例。
transport 用于在调试程序和 VM 使用的进程之间通讯。
dt_socket 套接字传输。
server=y/n VM是否需要作为调试服务器执行。
address=8787调试服务器监听的端口号。
suspend=y/n 是否在调试客户端建立连接之后启动 VM 。如果设置为y,它会阻塞程序运行,直到有客户端连接到对应的监听端口(这里是8787),程序才真正开始执行。我们有时候会抱怨程序一闪而过,还没来得及在本地加载上代码程序就执行完了,这种情况就可以使用suspend参数。
注意事项:
如果你是执行的jar来运行程序,
-jar参数不能写到-Xug参数前,像这样无法启用调试:
java -jar lib/Main.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=9527,server=y,suspend=y
要远程调试maven2启动的程序,例如mvn jetty:run,可以在启动程序时执行命令:export MAVEN_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=y"
如果是在Windows环境下,则是:
| set MAVEN_OPTS=-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y |
b. 执行命令 mvn tomcat7:run,如下图所示以mavenDebug工程为例:
然后我们就可以使用Eclipse对mvn进行调试了,
c. 打开IDE,进行如下配置:
鼠标选中你要调试的maven项目的pom.xml文件,右键,选择“Debug As”---->"Debug Configuritaions...",弹出一个窗口,在窗口的左边栏,往下拉一下,你可以看到“Remote Java Application”,选择它,右键,“New”,窗口右边将出现一些需要输入的框,按照下图填入相应的值即可:
输入值完成后,点“Debug”按钮即可。
命令行就会出现日志啦,直到看到日志最后一行出现信息: Starting ProtocolHandler ["http-bio-8080"],接下来你就可以用8080端口去访问你的应用了,而8787端口跟tomcat可无关哦,8080是tomcat的端口,8787则是jvm监听的端口。到此,项目已经以debug的模式启动了。
(2)方式二
1.在eclipse的run configurations中创建一个maven build,选择好Maven工程,在Goals一栏中输入tomcat7:run。然后进入“jre”Tab,在vm arguments一栏中输入-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
2.打开debug configuration,创建一个remote java application,同上“(1)方式一的c”部分的内容,这样,当服务器启动后,就可以进行远程debug了
(3)方式三
在tomcat/bin/的catalina.bat文件的开头加入下面的设置即可:
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
然后在eclipse新建一个remote debug,端口填入8787即可。
二、以jetty作为容器
1.在eclipse的run configurations中创建一个maven build,选择好Maven工程,在Goals一栏中输入jetty:run。然后进入“jre”Tab,在vm arguments一栏中输入-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n
2.打开debug configuration,创建一个remote java application,在host中输入服务器地址,一般就本机localhost。在port一栏中输入上面配置中端口号8787。这样,当服务器启动后,就可以进行远程debug了。这种debug方式的好外是可以在debug依赖的jar包,并在上面设置断点。(前提是你已经获得了jar包的源代码)