Помилка SBT: “Не вдалося побудувати термінал; повернення до непідтримуваного ... "


78

Сьогодні я зіткнувся з ПОМИЛКОЮ з SBT. Найкраще це можна показати за допомогою sbt sbt-versionкоманди:

Запустити 29.05.17:

eric@linux-x2vq:~$ 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

Запустити 01.06.17:

eric@linux-x2vq:~$ 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.

Будь-які ідеї щодо того, що може спричинити це, або як виправити помилку?

Дякую!


У мене те саме питання. Проблема полягає в тому, що воно infocmpмає шістнадцяткове значення, для color#0x100якого jline.UnixTerminal не може проаналізувати. Помилка вже виправлена: github.com/jline/jline2/commit/…
amuttsch

Відповіді:


54

Я знайшов пакет , який викликає цю проблему 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
Дякую за це та ваш допис до github. Я помітив проблему відразу після оновлення OpenSUSE Tumbleweed учора. ncurses! Я буду стежити за розвитком подій. Оцінено. :-)
ericky

як я міг це зробити на Ubuntu?
родригократи

Правильний спосіб виправити все це - оновити масштаб з 2.11.X до 2.13.X. Див .: github.com/sbt/sbt/issues/3240#issuecomment-325899575 Винний Lib є jline. : D
Маноель Вілела

180

У мене була та сама проблема, особливо коли для TERMзмінної середовища встановлено значення xterm-256color. Встановлення його для іншого значення вирішило проблему для мене, наприклад

export TERM=xterm-color

2
працює для мене, користувач арки. Arch Kernel 4.11.3-1-ARCH, sbt версія 2.5.15 "Streamy"
CybeX

додав це у верхній частині мого запуску
sbt

2
Також працює для мене, Arch Linux. Додав цей рядок до мого файлу ~ / .bashrc.
Вікторія Стюарт

Працює для Macos. Я використовую zsh як свою оболонку.
Raynal Gobel

4
Працює для мене на Ubuntu 18.04
Mule

24

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


2
Файл /usr/share/sbt/bin/sbt, швидше за все, буде встановлений як частина sbtпакету менеджером пакетів. Будь-які зміни цього файлу можуть бути видалені після sbtоновлення пакету, які можуть бути або невидимими для певного користувача (якщо інша особа оновлює sbtпакет), або перезаписані в момент забуття.
Тейлор Р

Ну, це було б добре, бо це, мабуть, виправлено в пізніших версіях.
Луїджі Плінге

21

sbtкоманда - це просто сценарій. Це завантаження $HOME/.sbtconfigна самому початку, так що просто покладіть

export TERM=xterm-color

як сказав @ user3113045 у файлі conf, sbt буде працювати. У цьому випадку ваші інші термінові команди все одно використовуватимуться xterm-256color.


1
Я вкладаю export TERM=xterm-colorсвій, ~/.bashrcі він чудово працює.
ChikuMiku

По-перше, використовуйте, which sbtщоб знайти папку, в яку потрібно вставити рядок. Наприклад, моя /usr/local/opt/sbt@0.13/bin/sbt. Я вклав у нього рядок, і це спрацювало
Catbuilts

7

Минув рік ... тепер це сталося зі мною.


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

Якщо ви не можете просто оновити sbt або знизити ncurses , ви можете змінити змінну середовища TERM, як зазначено в інших відповідях.

тривіальне виправлення:

Якщо ваш скрипт sbt - це скрипт bash (швидше за все, якщо ви не запустите файли .bat DOS ')

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

, тоді може бути достатньо додати цей обхідний шлях:

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

2
Замість цього file /usr/bin/sbt, можливо, ви захочете скористатися, file -L `which sbt`щоб переконатися, що sbt, що знаходиться на шляху користувача, перевірено і що будь-які символічні посилання переходять.
Тейлор Р

справді. Ви також можете додати інший сценарій як обгортку і помістити його в PATH, затінюючи оригінал.
комонада


3

Це вирішило проблему в моєму випадку (Користувачі Linux):

  1. Відкрийте термінал
  2. Перейдіть до каталогу проекту
  3. введіть "export TERM = xterm-color" у своєму терміналі без лапок
  4. Натисніть ENTER

Це все, і тоді вам добре йти.


Я помістив заяву у свій .bashrc (Ubuntu). Працював ідеально. Я припускаю, що це буде працювати у мене і у Fedora.
wayneeusa

1

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


0

Я зіткнувся з цією проблемою, коли використовую активатор, який внутрішньо використовує sbt. Я використовую Ubuntu, і ця помилка мене засмутила. Я почав стикатися з цією проблемою, коли біг

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

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

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


0

Для користувачів Ubuntu 20.04 відкрийте свій термінал і запустіть наведені нижче CMD

  • Перейдіть до цього каталогу "/ usr / share / sbt / bin" ($ cd / usr / share / sbt / bin)
  • дати дозвіл на редагування файлу ($ sudo chmod -R 777 sbt)
  • Відкрийте текстовий файл sbt у цьому каталозі ($ nano sbt)
  • Додайте цей cmd "export TERM = xterm-color" зверху та збережіть (Ctrl + X)

Приклад: -

#!/usr/bin/env bash
export TERM=xterm-color
set +e
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.