在cygwin/vista中sbt的两个问题

Fra*_*ery 6 command-line cygwin scala windows-vista sbt

我在windows vista上使用cygwin 1.77.我遇到sbt了shell中输出的问题.一些相关的环境变量:

TERM=cygwin
CYGWIN=server
LANG=C.UTF-8
Run Code Online (Sandbox Code Playgroud)

(1)当我输入sbt testshell时包含很多不可打印的字符:

替代文字

我怎样才能解决这个问题 ?

我的sbt shell脚本如下所示:

dir=`dirname $0`
stty -icanon min 1 -echo > /dev/null 2>&1
java -Djline.terminal=jline.UnixTerminal -Xmx512M -jar 
    `cygpath -w $dir`/sbt-launch-0.7.4.jar "$@"
stty icanon echo > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

(2)sbt命令无法找到scalatestjar并且我不知道如何配置它通过常春藤下载它.如果我将jar放入lib文件夹,它就可以工作.

ak2*_*ak2 6

关于1):

Cygwin控制台的工作方式是Cygwin DLL的一部分将Unix终端控制序列映射到Windows控制台API调用.由于该终端仿真是Cygwin DLL的一部分,因此它不适用于非Cygwin程序,例如Java运行时.相反,java它将直接与Windows控制台交谈,后者无法理解转义序列.因此它们直接出现在屏幕上.

有几种方法可以解决这个问题:

  • 告诉Java/Scala使用Windows控制台API而不是Unix控制序列.我想删除该-Djline.terminal=jline.UnixTerminal选项会这样做.
  • 设置CYGWIN=tty选项.这样,在Cygwin控制台中调用的程序将其I/O连接到"伪终端"(pty)设备,而不是直接连接到控制台窗口.这使得终端仿真功能可用于非Cygwin程序,但这意味着使用Windows控制台API的程序将无法正常工作.
  • 使用Cygwin的其他终端仿真器之一:mintty,xterm,rxvt(-unicode).与默认控制台相比,它们提供了更好的终端仿真和更明智的用户界面,但同样代价是不支持使用Windows控制台API的程序.

(顺便说一句,该CYGWIN=server选项已过时;无论如何,它启用的功能始终处于开启状态.)