在Netbeans / Maven中远程调试单元测试

时间:2016-05-29 16:32:07

标签: java maven unit-testing netbeans

我想使用Netbeans在Maven项目中的远程计算机上自动启动和调试单元测试。所有IDE功能都应该可以工作,例如调试,输出窗口等。只需单击“以调试为中心的测试方法”,该过程就必须完全自动化。

2 个答案:

答案 0 :(得分:0)

解决方案是使用自定义脚本替换mvn命令,该脚本将执行rsyncssh。通过两种工具的魔力,它可以很好地工作 。此外,它应该可移植到其他Maven IDE。当前指南适用于bash,但可以在Windows中使用powershellgroovy甚至cmd实现相同的提示。 (我尝试使用Nashorn,但在正确保留所有参数的同时执行其他命令的方式似乎已经破解。)

  • 在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" "$@"
    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 "$@"
        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中的yes设置为remote/etc/ssh/sshd_config
  • 创建新的Netbeans配置,将所有maven操作(包括clean& build)转发到远程计算机:

    • 进入Project' s属性
    • 创建新配置
    • 在"设置属性"添加:

      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集成,调试体验非常有效。我非常希望您能够轻松地进入其他项目的代码(它可以解析特定版本)。

答案 1 :(得分:-1)

Surefire / Failsafe插件支持开箱即用的远程调试:http://maven.apache.org/surefire/maven-surefire-plugin/examples/debugging.html