如何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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM