Ошибка 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.
Любые идеи о том, что может быть причиной этого и как исправить ошибку?
Спасибо!
Ответы
Ответ 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