首先,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 |
此時在某個由Maven管理的工程下執行mvn指令,將會使mvn進入遠端偵錯狀態,開通我們配置的偵聽連接埠號碼8787:
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包的原始碼)