Подтвердить что ты не робот

Ошибка SBT: "Не удалось создать терминал, вернуться к неподдерживаемому..."

Сегодня я столкнулся с ОШИБКОЙ с SBT. Его лучше всего показать командой sbt sbt-version:

Запуск от 5/29/17:

[email protected]:~$ sbt sbt-version
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option 
MaxPermSize=256M; support was removed in 8.0
[info] Set current project to eric (in build file:/home/eric/)
[info] 0.13.13

Запуск от 6/1/17:

[email protected]:~$ sbt sbt-version
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option             
MaxPermSize=256M; support was removed in 8.0
[ERROR] Failed to construct terminal; falling back to unsupported
java.lang.NumberFormatException: For input string: "0x100"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at jline.internal.InfoCmp.parseInfoCmp(InfoCmp.java:59)
at jline.UnixTerminal.parseInfoCmp(UnixTerminal.java:233)
at jline.UnixTerminal.<init>(UnixTerminal.java:64)
at jline.UnixTerminal.<init>(UnixTerminal.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at jline.TerminalFactory.getFlavor(TerminalFactory.java:209)
at jline.TerminalFactory.create(TerminalFactory.java:100)
at jline.TerminalFactory.get(TerminalFactory.java:184)
at jline.TerminalFactory.get(TerminalFactory.java:190)
at sbt.ConsoleLogger$.ansiSupported(ConsoleLogger.scala:123)
at sbt.ConsoleLogger$.<init>(ConsoleLogger.scala:117)
at sbt.ConsoleLogger$.<clinit>(ConsoleLogger.scala)
at sbt.GlobalLogging$.initial(GlobalLogging.scala:43)
at sbt.StandardMain$.initialGlobalLogging(Main.scala:64)
at sbt.StandardMain$.initialState(Main.scala:73)
at sbt.xMain.run(Main.scala:29)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
at xsbt.boot.Launch$.run(Launch.scala:109)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
at xsbt.boot.Launch$.launch(Launch.scala:117)
at xsbt.boot.Launch$.apply(Launch.scala:18)
at xsbt.boot.Boot$.runImpl(Boot.scala:41)
at xsbt.boot.Boot$.main(Boot.scala:17)
at xsbt.boot.Boot.main(Boot.scala)

[info] Set current project to eric (in build file:/home/eric/)
[info] 0.13.13

Никаких изменений (которые я знаю) не было ни для моей настройки SBT, ни для Java.

Любые идеи о том, что может быть причиной этого и как исправить ошибку?

Спасибо!

4b9b3361

Ответ 1

Я нашел пакет, который вызывает эту проблему: ncurses. Я понизил рейтинг ncurses до версии ncurses-6.0+20170429-1 (я использую Arch Linux), и SBT начинается просто отлично.

Шаги для Arch Linux:

cd /var/cache/pacman/pkg
sudo pacman -U ncurses-6.0+20170429-1-x86_64.pkg.tar.xz # or some other older version

Шаги для Mac: см. https://github.com/jline/jline2/issues/281

Я думаю, что эта проблема была введена с ncurses версии 20170506, см.: http://invisible-island.net/ncurses/NEWS.html#index-t20170506

+ modify tic/infocmp display of numeric values to use hexadecimal when
      they are "close" to a power of two, making the result more readable.

Я задал вопрос по трекеру вопросов SBT: https://github.com/sbt/sbt/issues/3240

Изменить: Версия SBT версии 0.13.16 содержит исправление для этой проблемы.

Ответ 2

У меня была такая же проблема, особенно когда переменная среды TERM установлена ​​на xterm-256color. Устанавливая его для другого значения, исправлена ​​проблема для меня, например.

export TERM=xterm-color

Ответ 3

Вы можете добавить export TERM=xterm-color в начало /usr/share/sbt/bin/sbt, потому что $HOME/.sbtconfig устарел.

Ответ 4

sbt команда - это просто script. Он загружает $HOME/.sbtconfig в самом начале, поэтому просто поставьте

export TERM=xterm-color

как @user3113045 сказал в файле conf, sbt будет работать. В этом случае ваши другие команды термина будут по-прежнему использовать xterm-256color.

Ответ 5

Прошел год... теперь это случилось со мной.


Итак, ncurses изменился, и соответствующая часть sbt была... я думаю... вероятно, реализована только на основе случайных угаданных тестов и наблюдений/ошибок, а не каких-либо спецификаций или RFC. (Пока что sbt - единственная программа с этой проблемой ncurses, о которой я знаю.)

Если вы не можете просто обновить sbt или понизить ncurses, вы можете изменить переменную окружения TERM, как указано в других ответах.

тривиальное исправление:

Если ваш sbt-скрипт - это какой-то bash-скрипт (скорее всего, если вы не запускаете DOS файлы .bat)

$ file /usr/bin/sbt
/usr/bin/sbt: Bourne-Again shell script, ASCII text executable

тогда может быть достаточно добавить этот обходной путь:

TERM="${TERM/xterm-256color/xterm-color}"

Ответ 6

Если вы можете, измените версию sbt в build.properties на более высокую. 13.16 работа для меня.

Ответ 7

Я столкнулся с этой проблемой, когда я использую активатор, который использует SBT внутренне. Я использую Ubuntu, и эта ошибка меня расстраивает. Я начал сталкиваться с этой проблемой, когда я побежал

$ activator gen-idea (инструмент, который согласно intellij является наследием)

После этого я попытался удалить весь кеш, который генерировал этот инструмент.

Я удалил каталоги .ivy и .sbt из своей домашней папки и запустил команду compile активатора cleanFiles, которая разрешила мою проблему.

Ответ 8

Я не могу написать комментарий, так как моя оценка слишком низкая, но ответ user3113045 сработал, когда я добавил export TERM=xterm-color в свой файл .zshrc