Две проблемы с sbt в cygwin / vista - PullRequest
6 голосов
/ 17 декабря 2010

Я использую Cygwin 1.77 на Windows Vista. У меня проблемы с выводом sbt в оболочке. Некоторые соответствующие переменные среды:

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

(1) Когда я набираю sbt test, оболочка содержит много непечатаемых символов:

alt text

Как я могу это исправить?

Мой скрипт оболочки sbt выглядит так:

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, и я не знаю, как настроить ее для загрузки через ivy. Это сработает, если я уроню банку в папку lib.

1 Ответ

6 голосов
/ 17 декабря 2010

Относительно 1):

Работа консоли Cygwin заключается в том, что есть часть библиотеки DLL Cygwin, которая отображает последовательности управления терминалом Unix в вызовы API консоли Windows. Поскольку эта эмуляция терминала является частью библиотеки Cygwin DLL, она недоступна для программ, не принадлежащих Cygwin, таких как среда выполнения Java. Вместо этого java будет говорить напрямую с консолью Windows, которая не понимает escape-последовательности. Следовательно, они появляются прямо на экране.

Есть несколько способов решить эту проблему:

  • Скажите Java / Scala использовать консольный API Windows вместо управляющих последовательностей Unix. Я думаю, удаление опции -Djline.terminal=jline.UnixTerminal сделает это.
  • Установите параметр CYGWIN=tty. При этом программы, вызываемые в консоли Cygwin, имеют свои входы / выходы, подключенные к устройству «псевдотерминал» (pty), вместо того, чтобы напрямую подключаться к окну консоли. Это делает функции эмуляции терминала доступными для программ, отличных от Cygwin, но это означает, что программы, использующие консольный API Windows, больше не будут работать правильно.
  • Используйте один из других терминальных эмуляторов Cygwin: mintty, xterm, rxvt (-unicode). Они предлагают лучшую эмуляцию терминала и более разумный пользовательский интерфейс, чем консоль по умолчанию, но опять же за счет того, что не поддерживают программы, использующие консольный API Windows.

(Кстати, опция CYGWIN=server устарела; функция, которую она включала, всегда включена.)

...