我想使用Netbeans在Maven项目中的远程计算机上自动启动和调试单元测试。所有IDE功能都应该可以工作,例如调试,输出窗口等。只需单击“以调试为中心的测试方法”,该过程就必须完全自动化。
答案 0 :(得分:0)
解决方案是使用自定义脚本替换mvn
命令,该脚本将执行rsync
和ssh
。通过两种工具的魔力,它可以很好地工作 。此外,它应该可移植到其他Maven IDE。当前指南适用于bash
,但可以在Windows中使用powershell
,groovy
甚至cmd
实现相同的提示。 (我尝试使用Nashorn,但在正确保留所有参数的同时执行其他命令的方式似乎已经破解。)
/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
放在路径上。我选择了后者,但要么就好了。AllowTcpForwarding
中的yes
设置为remote
或/etc/ssh/sshd_config
。创建新的Netbeans配置,将所有maven操作(包括clean& build)转发到远程计算机:
在"设置属性"添加:
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>
要使用,请在工具栏的下拉菜单中选择新配置,并照常调用任何maven目标。
答案 1 :(得分:-1)
Surefire / Failsafe插件支持开箱即用的远程调试:http://maven.apache.org/surefire/maven-surefire-plugin/examples/debugging.html