<p>Консоль sbt не может загрузить терминал - Неверный тип терминала: jline.UnixTerminal</p>

Созданный на 8 окт. 2012  ·  28Комментарии  ·  Источник: sbt/sbt

Я запускаю "консоль sbt" с помощью 0.12.0 под cygwin в Windows с scala 2.9.2, jdk 1.6.0_25.

Я использую сценарий оболочки, поставляемый как часть MSI, и TERM = xterm.

Я получаю этот вывод, а терминал практически не работает (нет локального эха, ^ D не выходит).

$ sbt console<br i="8"/> Getting net.java.dev.jna jna 3.2.3 ...<br i="9"/> :: retrieving :: org.scala-sbt#boot-jna<br i="10"/> confs: [default]<br i="11"/> 1 artifacts copied, 0 already retrieved (838kB/125ms)<br i="12"/> Getting org.scala-sbt sbt 0.12.0 ...<br i="13"/> :: retrieving :: org.scala-sbt#boot-app<br i="14"/> confs: [default]<br i="15"/> 40 artifacts copied, 0 already retrieved (8158kB/5419ms)<br i="16"/> Getting Scala 2.9.2 (for sbt)...<br i="17"/> :: retrieving :: org.scala-sbt#boot-scala<br i="18"/> confs: [default]<br i="19"/> 4 artifacts copied, 0 already retrieved (20090kB/3389ms)<br i="20"/> [info] Loading project definition from D:\workspace\scalaz-example-sbt\project<br i="21"/> [info] Set current project to scalaz-example-sbt (in build file:/D:/workspace/scalaz-example-sbt/)<br i="22"/> [info] Starting scala interpreter...<br i="23"/> [info]<br i="24"/> [ERROR] Failed to construct terminal; falling back to unsupportedjava.lang.IllegalArgumentException: Invalid terminal type: jline.UnixTerminal<br i="25"/> at scala.tools.jline.TerminalFactory.create(TerminalFactory.java:83)<br i="26"/> at scala.tools.jline.TerminalFactory.get(TerminalFactory.java:154)<br i="27"/> at scala.tools.jline.console.ConsoleReader.<init i="28">(ConsoleReader.java:87)<br i="29"/> at scala.tools.jline.console.ConsoleReader.<init i="30">(ConsoleReader.java:134)<br i="31"/> at scala.tools.nsc.interpreter.JLineReader$JLineConsoleReader.<init i="32">(JLineReader.scala:42)<br i="33"/> at scala.tools.nsc.interpreter.JLineReader.<init i="34">(JLineReader.scala:21)<br i="35"/> at scala.tools.nsc.interpreter.ILoop.chooseReader(ILoop.scala:777)<br i="36"/> at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:796)<br i="37"/> at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:851)<br i="38"/> at xsbt.ConsoleInterface.run(ConsoleInterface.scala:57)<br i="39"/> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br i="40"/> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br i="41"/> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br i="42"/> at java.lang.reflect.Method.invoke(Method.java:597)<br i="43"/> at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73)<br i="44"/> at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:64)<br i="45"/> at sbt.Console.console0$1(Console.scala:23)<br i="46"/> at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:24)<br i="47"/> at sbt.TrapExit$.executeMain$1(TrapExit.scala:33)<br i="48"/> at sbt.TrapExit$$anon$1.run(TrapExit.scala:42)<br i="49"/> Caused by: java.lang.ClassCastException: jline.UnixTerminal cannot be cast to scala.tools.jline.Terminal<br i="50"/> at scala.tools.jline.TerminalFactory.create(TerminalFactory.java:80)<br i="51"/> ... 19 more<br i="52"/> Welcome to Scala version 2.9.2 (Java HotSpot(TM) Client VM, Java 1.6.0_25).<br i="53"/> Type in expressions to have them evaluated.<br i="54"/> Type :help for more information.<br i="55"/> scala&gt;<br i="56"/> </init></init></init></init>

Похоже, это несовместимость между jline.jar, содержащим scala.tools.jline в ~ / .sbt / boot / scala-2.9.2 / lib / jline.jar и одним, содержащим простой ole jline в ~ / .sbt / boot / scala-2.9.2 / org.scala-sbt / sbt / 0.12.0 / jline-1.0.jar.

Если я удалю первое, я получу то же, что и проблема №504. Если я сотру ~ / .sbt / boot, как указано в 504, sbt загрузит все это снова.

Любое решение принято с благодарностью.

Все 28 Комментарий

Следует отметить, что это все еще проблема в 0.12.2.

У меня тоже есть эта проблема ... есть ли хоть какое-то решение?

Боюсь, что не нашел ни одного, который бы мне понравился. Вы можете запустить sbt под DOS. Я попытался найти способ передать -Djline.terminal = scala.tools.jline.UnixTerminal на консоль, но не смог заставить это работать.

можем ли мы заставить кого-нибудь взглянуть на это? конечно, было бы лучше для всех, если бы sbt работал в cygwin

Извините, я долго боролся с этим. На самом деле это довольно неприятная проблема с различными версиями jline. Мы обращаем внимание и пытаемся исправить это, но возникают проблемы.

Хорошо, я думаю, что у меня есть исправление для MSI, но у меня проблемы с использованием cygwin / terminal с уничтожением кнопки BACKSPACE в REPL. По-прежнему какое-то странное безумие с версиями jline / jansi.

Спасибо, Джош - если вы хотите, чтобы кто-нибудь это протестировал, дайте мне знать, какая сборка сейчас используется, и я попробую.

К вашему сведению - https://github.com/sbt/sbt-launcher-package/pull/47

Это результат утренней отладки. Надеюсь, я смогу забить еще немного здесь.

Возможно, исправлено с помощью 1a3ea6fb8b73d290aab73964c62ad3b14c30916b. Ожидается подтверждение.

Джентльмены, я просто пользователь sbt, как я могу попробовать это исправление / файл, если я даже не могу найти Launch.scala в своей установке?
Благодарность

Launch.scala - это исходный файл sbt. Вы можете либо собрать sbt из исходного кода (см. ВКЛАД), либо дождаться версии 0.13.0-RC1, которая может быть выпущена позже на этой неделе.

Хорошо, вот краткий анализ проблем.

_FIRST_ ->
У JLine есть проблемы с обнаружением cygwin. Это означает, что мы должны вручную передать параметр jline.Terminal в cygwin с использованием сценария-оболочки (в сочетании с хуками stty, благодаря странной среде cygwin и отсутствию прямых хуков cygwin в jline по уважительной причине).
См. Https://github.com/jline/jline2/issues/62
* _Примечание: этот обходной путь является распространенным решением для большинства пользователей jline cygwin. Я обновлю документы соответствующим образом для пользователей cygwin, и в нативных пакетах уже есть это исправление в течение некоторого времени. * _

_SECOND_ ->
JLine 1.x -> 2.x адаптировал настройку jline.Terminal чтобы вы могли передавать только "unix" или "windows" вместо имени класса. Это действительно только в Jline 2.x, но не в 1.x. Для sbt <0,13 используется jline 1.x, поэтому необходимо передать полное имя класса, какой терминал использовать. Scala + sbt 0.13 оба используют JLine 2.x, поэтому они могут просто передать unix в качестве параметра и готово.

_THIRD_ ->
Scala затеняет библиотеку jline (помещает ее в пакет scala.jline). Однако он не затеняет опцию jline.terminal ИЛИ он не обеспечивает ловушку, позволяющую работать с незатененными ссылками на классы jline. Считаю это ошибкой в ​​штриховке.

ТАК для 0.12.x у нас действительно нет решения этой проблемы. Начиная с версии 0.13, скрипты будут указывать терминал как = unix. Я только что убедился, что это прекрасно работает. Для версии 0.12.x я вижу один из нескольких вариантов:

  1. По умолчанию отключите jline при работе в cygwin.
  2. Используйте -Djline.terminal=jline.UnixTerminal и подождите, пока scala исправит их закрашенную jline.
  3. Оставьте консоль scala сломанной под cygwin.

Я собираюсь сообщить о проблеме с кодовой базой Scala и получить некоторые отзывы о том, как мы хотим действовать.

Примечание. Сообщение об ошибке Scala JLine: https://issues.scala-lang.org/browse/SI-7604

Отлично, спасибо, Джош. Основными действиями для 0.13.0-RC1 являются обновление документации по установке для ручной настройки, обновление страницы изменений, чтобы уведомить пользователей о возможном улучшении с помощью `-Djline.terminal = unix, и заставить собственные пакеты выполнять правильная вещь по умолчанию.

Да, у меня уже есть готовые патчи для собственных пакетов, я буду работать над документацией после того, как выясню эту проблему JANSI.

Привет, ребята, не могли бы вы добавить ответ на http://stackoverflow.com/questions/17124689/i-really-would-like-sbt-and-its-console-to-work-under-cygwin-any- как-ты-думаешь-я даю статус? Мне было интересно, какая версия sbt и Scala repl будет содержать исправление и есть ли какие-либо обходные пути на данный момент. Спасибо!

sbt 0.13 будет иметь исправление и будет работать с любой версией Scala AFAIK. Backspace, скорее всего, все равно будет сломан. Мы не уверены, что это за проблема, но есть исправление для Scala 2.11, которое также может решить эту проблему.

Спасибо - это хорошо знать. Backspace - мой главный источник боли.

Это, вероятно, ясно в контексте этой ошибки, но это будет ошибка возврата в Scala REPL на mintty / cygwin. Другие терминалы Windows (которым не требуется UnixTerminal) должны работать нормально, включая backspace.

Ok. Есть ли другие терминалы для Cygwin, поддерживающие вырезание и вставку? Я понимаю, что этот вопрос выходит за рамки этого исправления :) Я пришел с Mac, и Cygwin - необходимое зло.

Я собираюсь попробовать rxvt, когда вернусь к работе.

Я мало что знаю о параметрах Windows, кроме того, что я сделал, чтобы воспроизвести и исправить эту ошибку. Я считаю, что другие терминалы каким-то образом ограничены в более ранних версиях sbt, возможно, им не хватает поддержки цвета и ярлыков.

Просто как обновление. Используя 0.13 RC 5 на mintty / cygwin / win8, и все работает как шарм, вырезать и вставлять, и backspace в оболочке sbt и в включенной консоли scala. Спасибо всем за исправление, очень признателен.

не для меня ... backspace работает сейчас в sbt, но все еще ничего не делает в консоли scala
я что-то упускаю? (только что установил 13,5 сегодня вечером)

Если вы используете mintty, попробуйте включить «Backspace отправляет ^ H» в параметрах терминала в разделе «Ключи». Если это не помогло, убедитесь, что ^ H распознается как символ стирания, запустив stty из приглашения bash.

спасибо !!
"Backspace отправляет ^ H"

Эта установка backspace send ^ H звучит как что-то из наших часто задаваемых вопросов или документации. Кто-нибудь из вас не возражает внести свой вклад в то место, где вы, скорее всего, нашли бы информацию помимо запроса об ошибке :)

Спасибо и рад, что это работает!

Джош - Я не особо разбираюсь в github, так что дайте мне знать, если я сделал что-то не так.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги