SBT错误:"无法构建终端;回退到不支持的......"

eri*_*cky 68 sbt

我今天遇到了与SBT的错误.最好用sbt sbt-version命令显示:

运行于5/29/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
Run Code Online (Sandbox Code Playgroud)

运行于6/1/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
Run Code Online (Sandbox Code Playgroud)

对我的SBT或Java设置没有任何改变(我知道).

有关可能导致此错误或如何修复错误的任何想法?

谢谢!

use*_*045 157

我有同样的问题,特别是当TERM环境变量设置为xterm-256color.将它设置为不同的值可以解决我的问题,例如

export TERM=xterm-color
Run Code Online (Sandbox Code Playgroud)

  • 在Ubuntu 18.04上对我有效 (4认同)
  • 适合我,拱形用户.Arch Kernel 4.11.3-1-ARCH,sbt版本2.5.15"Streamy" (2认同)
  • Arch Linux也对我有用。将该行添加到我的〜/ .bashrc文件中。 (2认同)

amu*_*sch 53

我找到导致此问题的包: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
Run Code Online (Sandbox Code Playgroud)

适用于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.
Run Code Online (Sandbox Code Playgroud)

我在SBT问题跟踪器上提交了一个问题:https://github.com/sbt/sbt/issues/3240

编辑: SBT版本0.13.16包括此问题的修复程序.

  • 谢谢你和你的帖子到github.我昨天在openSUSE Tumbleweed更新后立即注意到了这个问题.ncurses的!我会关注事态发展.赞赏.:-) (2认同)

Mik*_*kov 22

您可以添加export TERM=xterm-color到顶部/usr/share/sbt/bin/sbt因为$HOME/.sbtconfig已弃用.

  • 软件包管理器很可能将文件/ usr / share / sbt / bin / sbt安装为sbt软件包的一部分。对该文件的任何编辑都可能在更新sbt软件包时被删除,这对于特定用户可能是不可见的(如果其他人正在更新sbt软件包),或者在健忘时被覆盖。 (2认同)

小智 18

sbt命令只是一个脚本.它$HOME/.sbtconfig在一开始就加载,所以就这么说吧

export TERM=xterm-color
Run Code Online (Sandbox Code Playgroud)

正如@ user3113045在conf文件中所说,sbt会起作用.在这种情况下,您的其他术语命令仍将使用xterm-256color.


小智 8

这解决了我的问题(Linux 用户):

  1. 打开你的终端
  2. 导航到您的项目目录
  3. 在终端中输入“export TERM=xterm-color”,不带引号
  4. 按 ENTER

这就是全部,然后你就可以开始了。


com*_*nad 6

一年过去了...现在发生在我身上.


所以,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
Run Code Online (Sandbox Code Playgroud)

,那么添加此解决方法可能就足够了:

TERM="${TERM/xterm-256color/xterm-color}"
Run Code Online (Sandbox Code Playgroud)

  • 而不是`file/usr/bin/sbt`,你可能想要使用`file -L \`sbt \``来确保检查用户路径上的sbt并遵循任何符号链接. (2认同)