2016-05-29 43 views
1

我想在使用Netbeans的Maven項目中的遠程機器上自動啓動和調試單元測試。所有的IDE功能都應該可以工作,例如調試,輸出窗口等。只需點擊一下「Debug Focused Test Method」,程序就必須完全自動化。遠程調試Netbeans/Maven中的單元測試

+0

爲什麼在遠程機器上?單元測試可以在IDE中運行,當然也可以調試? – khmarbaise

+0

@khmarbaise可能有一百萬個原因。對我而言,這是因爲我使用JUnit的「測試」來執行實際工作(幾乎像ipython筆記本),並且我希望它們能夠在我的大盒子上運行。 –

回答

0

解決方法是用一個自定義腳本替換mvn命令,該腳本將執行rsyncssh。通過這兩種工具的神奇,它的作品真的很好。另外,它應該可以移植到其他Maven IDE。目前的指南是針對bash,但是可以在Windows中使用powershell,groovy或甚至cmd來實現相同的想法。 (我試圖用犀牛,但方式執行其他命令,同時妥善保存所有的參數似乎打破。)

  • 在NetBeans目錄/usr/local/netbeans-8.1/java/maven/bin/,重命名mvn腳本:
    • cd /usr/local/netbeans-8.1/java/maven/bin/
    • sudo mv mvn mvn.orig
  • 創建新的mvn腳本。

    #!/bin/bash 
    
    if [ -z "$REMOTE" ] ; then 
        SCRIPTDIR=$(dirname "$0") 
        "$SCRIPTDIR/mvn.orig" "[email protected]" 
    else 
        if [ -z "$REMOTE_BASE_DIR" ] ; then 
         echo "ERROR: Please set environment variable REMOTE_BASE_DIR to the folder which contains the project directory" 
         exit 
        fi 
    
        PROJECT_DIR=$(basename "$(pwd)") 
        REMOTE_PROJECT_DIR=$REMOTE_BASE_DIR/$PROJECT_DIR/ 
        ARGS= 
        for var in "[email protected]" 
        do 
        ARGS="$ARGS \\\"$var\\\"" 
        done 
    
        echo "Syncing project directory..." 
        (set -x; rsync -aczhW --progress --delete --exclude '.git' --exclude 'target' $RSYNC_OPTS ./ "$REMOTE:\"$REMOTE_PROJECT_DIR\"") 
    
        echo "Executing maven..." 
        if [ "$REMOTE_PORT" = '${jpda.address}' ] ; then 
         (set -x; ssh ${REMOTE} "cd \"$REMOTE_PROJECT_DIR\"; mvn $ARGS") 
        else 
         (set -x; ssh -R $REMOTE_PORT:localhost:$REMOTE_PORT ${REMOTE} "cd \"$REMOTE_PROJECT_DIR\"; mvn $ARGS") 
        fi 
    fi 
    
  • 配置遠程機器:
    • 要麼安裝mvn,或安裝NetBeans,並把它mvn的道路上。我選擇了後面的,但兩者都應該沒問題。
    • 配置ssh。我不會在這裏描述如何去做。確保AllowTcpForwarding設置爲yesremote/etc/ssh/sshd_config
  • 創建新的NetBeans配置,將所有行家的行動(包括清潔&版本)轉發到遠程機器:

    • 走進項目的屬性
    • 創建新的配置
    • 在「設置屬性「add:

      Env.REMOTE_BASE_DIR=<directory on the server that will contain your project directory> 
      Env.REMOTE=<address of remote machine> 
      Env.REMOTE_PORT=${jpda.address} 
      Env.RSYNC_OPTS=<optional, but could be another --exclude> 
      

      screenshot

    • 要使用,請在工具欄的下拉菜單中選擇新配置,然後照常調用任何maven目標。

    • 我仍在尋找一種方法來設置全局配置。如果你知道如何做到這一點,請告訴我!
  • 或者,創建一個具有相同屬性集的自定義操作。
  • 由於JVM中內置的遠程調試功能以及Maven的版本/依賴關係跟蹤和Netbeans中出色的Maven集成,我應該提到調試體驗工作得很好。我真的很喜歡你能夠輕鬆地進入其他項目的代碼(並且它可以解析特定的版本)。
+0

任何人都知道爲什麼我的屏幕截圖不顯示? –

-1

神火/故障安全插件支持遠程調試開箱:http://maven.apache.org/surefire/maven-surefire-plugin/examples/debugging.html

+0

當我需要在IntelliJ IDEA中調試集成測試時,我曾多次使用過這個功能,並且我需要Maven執行所有預集成測試步驟。 –

+0

問題是如何使過程自動化。 –

+0

在IntelliJ IDEA中,可以通過運行配置來首先執行某個其他運行配置。如果NetBeans支持類似的功能,您可以在需要的地方添加斷點,然後運行config:1)使用-Dmaven.surefire.debug運行Maven構建; 2)連接遠程調試器。 你在談論什麼樣的自動化?右鍵單擊某個測試並僅運行該測試? –