SBT错误:“无法构建终端;退回到不受支持的地方……”


77

我今天在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

在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

我的SBT或Java设置均未更改(据我所知)。

关于什么可能导致此错误或如何解决该错误的任何想法?

谢谢!


我有同样的问题。问题是,它infocmp具有color#0x100jline.UnixTerminal无法解析的十六进制值。该错误已得到修复:github.com/jline/jline2/commit/…–
amuttsch

Answers:


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上做到这一点?
rodrigocprates

实际解决所有问题的正确方法是将scala从2.11.X升级到2.13.X。参见:github.com/sbt/sbt/issues/3240#issuecomment-325899575 有罪的lib是jline。:D
Manoel Vilela

178

我遇到了同样的问题,尤其是当TERM环境变量设置为时xterm-256color。将其设置为其他值可以解决我的问题,例如

export TERM=xterm-color

2
对我有用,拱门用户。Arch内核4.11.3-1-ARCH,sbt版本2.5.15“
Streamy

在我的sbt启动器顶部添加了此内容
Utgarda'7

2
Arch Linux也对我有用。将该行添加到我的〜/ .bashrc文件中。
维多利亚·斯图亚特

适用于Macos。我使用zsh作为我的外壳。
雷纳尔·戈贝尔

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软件包),或者在健忘时被覆盖。
Taylor R

那样很好,因为它显然已在更高版本中修复。
路易吉·普林格

21

sbt命令只是一个脚本。它$HOME/.sbtconfig从一开始就加载,所以只要放

export TERM=xterm-color

就像@ user3113045在conf文件中所说的那样,sbt将起作用。在这种情况下,您的其他term命令仍将使用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脚本(很可能,除非您运行DOS的.bat文件)

$ 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并确保遵循了任何符号链接。
泰勒R

确实。您还可以添加另一个脚本作为包装,并将其放在PATH中以遮盖原始脚本。
comonad


3

就我而言,这解决了该问题(Linux用户):

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

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


我将声明放在我的.bashrc(Ubuntu)中。做得完美。我认为它在Fedora中也适用。
Wayneeusa

1

我的分数太低,因此我无法写评论,但是当我添加export TERM=xterm-color.zshrc文件中时,user3113045的答案有效


0

我在使用内部使用sbt的激活器时遇到了这个问题。我正在使用Ubuntu,并且此错误使我感到沮丧。我跑步时就开始面对这个问题

$活化剂gen-idea(根据intellij遗留的工具)

之后,我尝试删除此工具生成的所有缓存。

我从主文件夹中删除了.ivy和.sbt目录,并运行了activator cleanFiles编译命令,该命令解决了我的问题。


0

对于Ubuntu 20.04用户,打开您的终端并运行下面的CMD

  • 转到此“ / usr / share / sbt / bin”目录($ cd / usr / share / sbt / bin)
  • 授予编辑文件的权限($ sudo chmod -R 777 sbt)
  • 打开此目录中的sbt文本文件($ nano sbt)
  • 在顶部添加此“ export TERM = xterm-color” cmd并保存(Ctrl + X)

例如:-

#!/usr/bin/env bash
export TERM=xterm-color
set +e
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.