在cygwin / vista中sbt的两个问题

时间:2010-12-17 09:01:30

标签: scala command-line windows-vista cygwin sbt

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

TERM=cygwin
CYGWIN=server
LANG=C.UTF-8

(1)当我输入sbt test时,shell包含许多不可打印的字符:

alt text

我该如何解决这个问题?

我的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

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

1 个答案:

答案 0 :(得分: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选项已过时;无论如何,它启用的功能始终处于开启状态。)