1. 程式人生 > 其它 >如何Maven結合IDEA進行Debug

如何Maven結合IDEA進行Debug

介紹

由於Idea和Maven class loading的規則不同, 同樣的測試使用Maven執行和使用Idea執行可能會得到不同的結果。 而我們的CI(持續整合)往往是使用maven 命令去執行的。
在此情況下, 將測試使用maven執行起來, 然後結合IDEA強大的debug能力就顯得非常必要。如果熟練掌握此種debug方式, 也可以減少我們依賴idea進行編譯,更新index這些極其耗時的工作。

建立一個測試

假設我們已經建立了一個工程maven_debug, 並且建立了一個測試類MySuperClassTest

啟動mmaven測試並執行在debug模式

mvn -Dtest=MySuperClassTest -Dmaven.surefire.debug test
  • JVM引數 -Dmaven.surefire.debug即表示將測試執行在debug模式下
  • 這時maven將會首先編譯測試,然後啟動測試,並等待IDE接入debug模式, 此時我們要配置IDEA執行一個remote JVM debug程序, 接入mvn debug.
  • 通常情況下, 測試將會監聽在5005埠。

配置remote JVM debug模板

  • 開啟idea, 從以下路徑 開啟remote JVM debug配置介面 run-> edit configurations-> Edit configuration templates -> remote JVM debug
  • 修改或檢查command line arguments for remote JVM 中的埠和其他引數正確, 埠即為上一步mven debug監聽的埠, 預設為5005
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
  • 確保host引數正確, transport引數正確
  • 引數都填寫正確後, 點選appy按鈕儲存修改, 這一步完成,代表我們的 remote JVM debug模板配置完成, 接下來我們需要基於此模版, 建立一個程序去連線maven測試。

啟動remote JVM debug程序

開啟run/debug configuration介面, 路徑run-> edit configurations
點左上角+按鈕, 在彈出的選擇框中, 選擇remote JVM debug模板,建立一個run/debug配置,點選apply儲存。
此時在tools bar run/debug下拉列表就可以看到新建立的run/debug 配置, 單擊即可啟動此該remote JVM debug程序

設定斷點

在IDEA中設定斷點, 當程式執行到斷點位置就會停下。

其他

如果你需要debug一個maven外掛 那麼需要使用另外一個maven命令mvnDebug

mvnDebug -Dtest=MySuperClassTest test

mvnDebug 預設監聽在8000埠, 需要啟動一個remote JVM debug程序連線其8000埠, 這樣即可在IDEA中debug maven外掛。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

參考文件

How to Debug a Test Run with Maven

Run Maven tests with -Dmaven.surefire.debug and -DforkMode=never

轉載請註明出處, 更多博文請訪問https://www.cnblogs.com/guoapeng/