17

我在我的 mac 上使用山狮和 java 7 启动 play 2.2.0 应用程序时遇到问题:

[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.TerminalFactory.create(TerminalFactory.java:101)
at jline.TerminalFactory.get(TerminalFactory.java:159)
at sbt.ConsoleLogger$.ansiSupported(ConsoleLogger.scala:85)
at sbt.ConsoleLogger$.<init>(ConsoleLogger.scala:79)
at sbt.ConsoleLogger$.<clinit>(ConsoleLogger.scala)
at sbt.GlobalLogging$.initial(GlobalLogging.scala:40)
at sbt.StandardMain$.initialGlobalLogging(Main.scala:54)
at sbt.StandardMain$.initialState(Main.scala:60)
at sbt.xMain.run(Main.scala:26)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:57)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:77)
at xsbt.boot.Launch$.run(Launch.scala:57)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
at xsbt.boot.Launch$.launch(Launch.scala:65)
at xsbt.boot.Launch$.apply(Launch.scala:16)
at xsbt.boot.Boot$.runImpl(Boot.scala:32)
at xsbt.boot.Boot$.main(Boot.scala:21)
at xsbt.boot.Boot.main(Boot.scala)

java.lang.IncompatibleClassChangeError: JLine incompatibility detected.  Check that the sbt launcher is version 0.13.x or later.
at sbt.ConsoleLogger$.ansiSupported(ConsoleLogger.scala:96)
at sbt.ConsoleLogger$.<init>(ConsoleLogger.scala:79)
at sbt.ConsoleLogger$.<clinit>(ConsoleLogger.scala)
at sbt.GlobalLogging$.initial(GlobalLogging.scala:40)
at sbt.StandardMain$.initialGlobalLogging(Main.scala:54)
at sbt.StandardMain$.initialState(Main.scala:60)
at sbt.xMain.run(Main.scala:26)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:57)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:77)
at xsbt.boot.Launch$.run(Launch.scala:57)
at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45)
at xsbt.boot.Launch$.launch(Launch.scala:65)
at xsbt.boot.Launch$.apply(Launch.scala:16)
at xsbt.boot.Boot$.runImpl(Boot.scala:32)
at xsbt.boot.Boot$.main(Boot.scala:21)
at xsbt.boot.Boot.main(Boot.scala)

Error during sbt execution: java.lang.IncompatibleClassChangeError: JLine incompatibility     detected.  Check that the sbt launcher is version 0.13.x or later.

它并没有真正与 play 相关联,因为当我在该目录中直接启动 sbt 时遇到了同样的错误。所以我尝试了几件事:

  • 从我的主目录中删除了所有与 sbt 相关的东西,并尝试使用来自https://github.com/paulp/sbt-extras/blob/master/sbt的 sbt 脚本- >同样的问题
  • 从我的常春藤回购目录中删除所有罐子并重新开始 sbt - >同样的问题
  • 直接下载了一个 sbt 启动器(版本 0.13.0)-> 同样的问题
  • 尝试使用 java 6 -> 同样的问题
  • 试图调试 sbt 以找出问题所在,但我发现 jline 不承认它应该使用 UnixTerminal(我通过设置 systemProperties 来工作)但又一次 - >同样的错误

我认为这与一些奇怪的链接有关,因为应该使用的终端的类版本似乎很旧。至少这是jvm所抱怨的。

我在带有 ubuntu 的虚拟机上尝试了它,它运行良好,所以我认为我的系统一团糟,或者我做错了什么。

有人有什么想法吗?

4

4 回答 4

16

我有同样的问题。我的项目使用的是 SBT 0.13

原来我还需要将 SBT Launcher 升级到 0.13 版本。

于 2013-11-06T14:34:59.387 回答
8

如果您在启用详细类加载 ( -verbose:class) 的情况下启动 JVM,这可能有助于排除有问题的 JLine 类的来源。也许您的 JVM 扩展目录之一中有一个 JLine jar,可能~/Library/Java/Extensions/System/Library/Java/Extensions.

于 2013-10-19T15:07:20.200 回答
1

尝试将 SBT 版本更新到 0.13。只需下载 sbt tar 文件并更改 .bash_profile 文件中的路径。再次尝试在项目目录中运行 sbt 命令。那应该可以解决问题。

于 2015-04-17T23:25:11.870 回答
1

如果您在 SBT 0.13 项目中使用 0.12 版本的 SBT 启动器,也会发生此错误,如错误消息中所建议的那样。

于 2013-11-26T21:38:07.050 回答