Groovy bootstrap错误在Windows 7上使用GIT BASH

问题描述:

我正在调用一个git钩子来预先提交。这会触发一个groovy脚本的调用,并以允许远程调试钩子执行的方式执行。像这样:Groovy bootstrap错误在Windows 7上使用GIT BASH

#!/usr/bin/env groovy 
groovy -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,address=8085,suspend=y "C:\Users\.......hooks\PreCommit.groovy" 

当我触发与使用GIT BASH的我看到下面的错误钩:

/c/Program Files (x86)/Groovy/Groovy-2.1.0/bin/startGroovy: line 96: [: too many arguments org.codehaus......: startup failed: .... expected EOF, found ':' @ line 3 column 35] 
当我需要快速浏览一下startGroovy文件我看到下面的代码不清

- 其中线96是如果条件使用Groovy家:

# For Cygwin, ensure paths are in UNIX format before anything is touched. 
if $cygwin ; then 
    [ -n "$GROOVY_HOME" ] && GROOVY_HOME=`cygpath --unix "$GROOVY_HOME"` 
    [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"` 
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 
    [ -n "$CP" ] && CP=`cygpath --path --unix "$CP"` 
else 
    if [ -n "$GROOVY_HOME" -a `expr "$GROOVY_HOME":'\/$'` ] ; then 
     GROOVY_HOME=`echo $GROOVY_HOME | sed -e 's/\/$//'` 
    fi 
fi 

这是在常规引导的错误吗?我的windows 7有它env变量GROOVY_HOME正确指向:C:\ program文件(x86)\ Groovy \ Groovy-2.1.0

问题出在Groovy的脚本中。该脚本没有在所有正确的位置正确地引用env变量GROOVY_HOME。 GROOVY_HOME表示的路径中的空格,在我的例子“Program Files(x86)”中有2个空格,被解释为分隔符并导致路径被解析为多于1个参数。要修复它,请将Windows环境变量GROOVY_HOME的定义更改为使用路径的波浪号版本。编辑你的环境变量GROOVY_HOME(在Vista上,启动/右键单击计算机/属性/高级系统设置/环境变量/用户或系统,我的系统)并设置为c:/Progra~2/Groovy/Groovy-2.1。 3。当你启动你的Git,MinGW或CygWin shell时,你将不会有空格,也不应该得到任何错误。

+0

这正是我需要的,谢谢! – 2013-05-07 19:54:43

Git Bash中只有实现cgywin的剥离版本。一个解决方案是使用一个完整的Cygwin安装的混帐,但它可能类似于UNIX风格的目录名称创建自己的.bashrc:

# Check to see what the DOS directories are 
echo GROOVY_HOME=$GROOVY_HOME 
echo JAVACMD=$JAVACMD 
echo JAVA_HOME=$JAVA_HOME 
echo CP=$CP 

# Add the directories you found to .bashrc in a unix style 
cat - >>~.bashrc 
export GROOVY_HOME='/c/program file (x86)/Groovy/Groovy-2.1.0' 
export JAVACMD="..." 
export JAVA_HOME="/c/Program files/Java/jre7/bin/java" 
export CP= "..." 

请更改路径,适当。您可以使用notepad ++或其他编辑器而不是使用cat来编辑.bashrc。请记住cat命令在Bash中使用Control-D终止,而DOS副本con file.txt使用Control-Z。通过将这些变量放在.bashrc中,它们不会干扰你的DOS环境变量。

+0

这是一个有趣的观察。尽管如此,我只是测试它没有运气。事实证明'if $ cygwin'是错误的,因此没有任何cygpath被调用,所以错误必须围绕'if'-n“$ GROOVY_HOME”-a'expr“$ GROOVY_HOME”:'\/$' '];然后 GROOVY_HOME ='echo $ GROOVY_HOME | sed -e's/\/$ //'' fi'。我已经在我的.bashrc中插入了导出,并且虽然看起来在startGroovy文件中正确设置了回显,但它将显示GROOVY_HOME格式仍然是窗口。 – 2013-02-20 19:53:46