scala - 对于某些项目,REPL 在 sbt 中无法使用控制台命令

标签 scala sbt

尝试使用 Coursera Spark/bigdata 类(class),在 sbt 中尝试使用 console 命令时出现以下错误。堆栈跟踪后,出现 scala > 提示,但控制台无法正常工作,因为我键入时没有出现任何文本。尝试了“示例”和“维基百科”作业;一样。他们确实可以编译并通过测试——只是我不能使用 sbt 控制台。

这很奇怪,因为控制台在其他项目上工作得很好,特别是 Coursera progfun2 类(class),它有一个非常相似的构建文件。

C:\Users\Rhys\Documents\Java\SbtProjects\example>sbt
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[info] Loading global plugins from C:\Users\Rhys\.sbt\0.13\plugins
[info] Loading project definition from C:\Users\Rhys\Documents\Java\SbtProjects\example\project
[info] Updating {file:/C:/Users/Rhys/Documents/Java/SbtProjects/example/project/}example-build...
[info] Resolving org.scala-sbt.ivy#ivy;2.3.0-sbt-c5d1b95fdcc1e1007740ffbecf4eb07[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 7 Scala sources to C:\Users\Rhys\Documents\Java\SbtProjects\example\project\target\scala-2.10\sbt-0.13\classes...
[info] Set current project to bigdata-example (in build file:/C:/Users/Rhys/Documents/Java/SbtProjects/example/)
> console
[info] Compiling 1 Scala source to C:\Users\Rhys\Documents\Java\SbtProjects\example\target\scala-2.11\classes...
[info] Starting scala interpreter...
[info]
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.NoClassDefFoundError: Could not initialize class scala.tools.fusesource_embedded.jansi.internal.Kernel32
        at scala.tools.fusesource_embedded.jansi.internal.WindowsSupport.getConsoleMode(WindowsSupport.java:50)
        at scala.tools.jline_embedded.WindowsTerminal.getConsoleMode(WindowsTerminal.java:204)
        at scala.tools.jline_embedded.WindowsTerminal.init(WindowsTerminal.java:82)
        at scala.tools.jline_embedded.TerminalFactory.create(TerminalFactory.java:101)
        at scala.tools.jline_embedded.TerminalFactory.get(TerminalFactory.java:158)
        at scala.tools.jline_embedded.console.ConsoleReader.<init>(ConsoleReader.java:229)
        at scala.tools.jline_embedded.console.ConsoleReader.<init>(ConsoleReader.java:221)
        at scala.tools.jline_embedded.console.ConsoleReader.<init>(ConsoleReader.java:209)
        at scala.tools.nsc.interpreter.jline_embedded.JLineConsoleReader.<init>(JLineReader.scala:62)
        at scala.tools.nsc.interpreter.jline_embedded.InteractiveReader.<init>(JLineReader.scala:34)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$instantiater$1$1.apply(ILoop.scala:858)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$scala$tools$nsc$interpreter$ILoop$$instantiater$1$1.apply(ILoop.scala:855)
        at scala.tools.nsc.interpreter.ILoop.scala$tools$nsc$interpreter$ILoop$$mkReader$1(ILoop.scala:862)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$21$$anonfun$apply$9.apply(ILoop.scala:873)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$21$$anonfun$apply$9.apply(ILoop.scala:873)
        at scala.util.Try$.apply(Try.scala:192)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$21.apply(ILoop.scala:873)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$21.apply(ILoop.scala:873)
        at scala.collection.immutable.Stream$$anonfun$map$1.apply(Stream.scala:418)
        at scala.collection.immutable.Stream$$anonfun$map$1.apply(Stream.scala:418)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1233)
        at scala.collection.immutable.Stream$Cons.tail(Stream.scala:1223)
        at scala.collection.immutable.Stream.collect(Stream.scala:435)
        at scala.tools.nsc.interpreter.ILoop.chooseReader(ILoop.scala:875)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1$$anonfun$apply$mcZ$sp$2.apply(ILoop.scala:914)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:914)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
        at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:909)
        at scala.reflect.internal.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:97)
        at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:909)
        at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:934)
        at xsbt.ConsoleInterface.run(ConsoleInterface.scala:62)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:101)
        at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:76)
        at sbt.Console.sbt$Console$$console0$1(Console.scala:22)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:23)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply(Console.scala:23)
        at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply(Console.scala:23)
        at sbt.Logger$$anon$4.apply(Logger.scala:85)
        at sbt.TrapExit$App.run(TrapExit.scala:248)
        at java.lang.Thread.run(Unknown Source)

Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111).
Type in expressions for evaluation. Or try :help.

scala>

如果有任何帮助,这里是 build.sbt:

name := course.value + "-" + assignment.value

scalaVersion := "2.11.8"

scalacOptions ++= Seq("-deprecation")

courseId := "e8VseYIYEeWxQQoymFg8zQ"

resolvers += Resolver.sonatypeRepo("releases")

// grading libraries
libraryDependencies += "junit" % "junit" % "4.10" % "test"
libraryDependencies ++= assignmentsMap.value.values.flatMap(_.dependencies).toSeq

// include the common dir
commonSourcePackages += "common"

assignmentsMap := {
  val depsSpark = Seq(
    "org.apache.spark" %% "spark-core" % "2.1.0"
  )
  Map(
    "example" -> Assignment(
      packageName = "example",
      key = "9W3VuiJREeaFaw43_UrNUw",
      itemId = "I6L8m",
      partId = "vsJoj",
      maxScore = 10d,
      dependencies = Seq(),
      options = Map("Xmx"->"1540m", "grader-memory"->"2048")),
    "wikipedia" -> Assignment(
      packageName = "wikipedia",
      key = "EH8wby4kEeawURILfHIqjw",
      itemId = "QcWcs",
      partId = "5komc",
      maxScore = 10d,
      styleScoreRatio = 0.0,
      dependencies = depsSpark,
      options = Map("Xmx"->"1540m", "grader-memory"->"2048", "totalTimeout" -> "900", "grader-cpu" -> "2")),
    "stackoverflow" -> Assignment(
      packageName = "stackoverflow",
      key = "7ByAoS4kEea1yxIfJA1CUw",
      itemId = "FWGnz",
      partId = "OY5fJ",
      maxScore = 10d,
      styleScoreRatio = 0.0,
      dependencies = depsSpark,
      options = Map("Xmx"->"1540m", "grader-memory"->"2048", "totalTimeout" -> "900", "grader-cpu" -> "2")),
    "timeusage" -> Assignment(
      packageName = "timeusage",
      key = "mVk0fgQ0EeeGZQrYVAT1jg",
      itemId = "T19Ec",
      partId = "y8PO8",
      maxScore = 10d,
      styleScoreRatio = 0.0,
      dependencies = depsSpark :+ ("org.apache.spark" %% "spark-sql" % "2.1.0"),
      options = Map("Xmx"->"1540m", "grader-memory"->"2048", "totalTimeout" -> "900", "grader-cpu" -> "2"))
  )
}

貌似遇到了a similar problem几年前 jansi 启动了 REPL,但这次 del %TEMP%\jansi.dll 的解决方案报告没有这样的文件。

最佳答案

这是由于此 Coursera 类(class)作业中的项目引用的“coursier”库中存在问题。

看起来这个问题是 Windows 特有的,大约一个月前(~2017 年 2 月)解决了。看这里:https://github.com/coursier/coursier/issues/274 .值得庆幸的是,此修复程序提供了更新版本的“coursier”库。

因此,解决方案是让您的作业项目使用这个更新的固定版本的库。为此,请更改分配文件夹内的“project\plugins.sbt”中的相关文本

addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.0-M15")

addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.0-M15-5") // or really anything past M15-3 it seems, but M15-5 is currently 'newest'

然后你就可以开始了!

关于scala - 对于某些项目,REPL 在 sbt 中无法使用控制台命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43023486/

相关文章:

scala - 对象压缩不是 org.apache.commons 包的成员

scala - 我应该在 build.sbt 中包含 scala-compiler 作为依赖项吗?

php - PHP之后要学什么? Scala 还是 Clojure?

maven - 让 Play/SBT 应用程序依赖于 Maven POM

scala - 使用 SBT 依赖项的 `test` 配置的类路径

scala - 在 IntelliJ 中运行 ScalaTest 时“无法加载 Suite 类”

scala - Akka 流/HTTP : Get original request from response

sbt 无法从 runMain 中找到 "main"类,但可以从运行中看到它

scala - Intellij IDEA - 输出路径 ...\project\target\idea-classes 与源根目录​​相交。仅清理由构建创建的文件

scala - Visual Studio代码: how can I import the `sbt` -changes