簡體   English   中英

Scala SBT編譯錯誤

[英]Scala SBT compile error

我一直在按照本教程學習如何在Scala中使用Akka HTTP。 我沒有使用Scala的經驗。 我正在使用IntelliJ Idea 2016.3 Ultimate。

我創建了一個項目,並按照指南的說明進行了配置。

name := "My Project"

version := "1.0"

scalaVersion := "2.9.1"

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies += "com.typesafe.akka" % "akka-actor" % "2.0"

我的代碼與指南中的代碼完全相同但是當我運行SBT命令編譯時,出現以下錯誤

[info] Updating {file:/Users/Javyer/Testing/Akka-Test/}akka-test...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/Javyer/Testing/Akka-Test/target/scala-2.9.1/classes...
[info] 'compiler-interface' not yet compiled for Scala 2.9.1.final. Compiling...
error: error while loading CharSequence, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar(java/lang/CharSequence.class)' is broken
(bad constant pool tag 18 at byte 10)
error: error while loading AnnotatedElement, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar(java/lang/reflect/AnnotatedElement.class)' is broken
(bad constant pool tag 18 at byte 76)
error: error while loading Arrays, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar(java/util/Arrays.class)' is broken
(bad constant pool tag 18 at byte 765)
error: error while loading Comparator, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/rt.jar(java/util/Comparator.class)' is broken
(bad constant pool tag 18 at byte 20)
/var/folders/kw/80c0kgzs0b9d06vjrbx0l6g40000gn/T/sbt_139df807/xsbt/ExtractAPI.scala:549: error: java.util.Comparator does not take type parameters
  private[this] val sortClasses = new Comparator[Symbol] {
                                      ^
5 errors found
[info] Resolving org.scala-sbt#interface;0.13.13 ...
[error] (compile:compileIncremental) Error compiling sbt component 'compiler-interface'
[error] Total time: 5 s, completed Mar 22, 2017 11:42:21 AM

如果我將build.sbt更改為akka庫的最新版本

name := "Akka-Test"

version := "1.0"

scalaVersion := "2.12.1"

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-actor" % "2.4.17",
  "com.typesafe.akka" %% "akka-remote" % "2.4.17"
)

然后再次編譯,我得到一個不同的錯誤

[info] Updating {file:/Users/Javyer/Testing/Akka-Test/}akka-test...
[info] Resolving jline#jline;2.14.1 ...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/Javyer/Testing/Akka-Test/target/scala-2.12/classes...
[error] /Users/Javyer/Testing/Akka-Test/src/main/scala/Pi.scala:5: object RoundRobinRouter is not a member of package akka.routing
[error] import akka.routing.RoundRobinRouter
[error]        ^
[error] /Users/Javyer/Testing/Akka-Test/src/main/scala/Pi.scala:6: object Duration is not a member of package akka.util
[error] import akka.util.Duration
[error]        ^
[error] /Users/Javyer/Testing/Akka-Test/src/main/scala/Pi.scala:7: object duration is not a member of package akka.util
[error] import akka.util.duration._
[error]                  ^
[error] /Users/Javyer/Testing/Akka-Test/src/main/scala/Pi.scala:17: not found: type Duration
[error]   case class PiApproximation(pi: Double, duration: Duration)
[error]                                                    ^
[error] /Users/Javyer/Testing/Akka-Test/src/main/scala/Pi.scala:40: not found: value RoundRobinRouter
[error]     val workerRouter = context.actorOf(Props[Worker].withRouter(RoundRobinRouter(nrOfWorkers)), name = "workerRouter")
[error]                                                                 ^
[error] 5 errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 4 s, completed Mar 22, 2017 11:47:47 AM

我怎樣才能解決這個問題? 我不知道如何調試此錯誤,也不知道從哪里開始解決此問題。 就像我說的那樣,這是我第一次使用Scala進行測試,因此我以前沒有使用它的經驗,因此,請給我詳細答案。

謝謝!

第一個錯誤:當您使用1.8時,Scala 2.9.x需要JVM運行時v 1.6或1.7,這將無法正常工作,因為我們從消息中可以清楚地看到(“破損類”意味着運行時不了解Java的結構)您正在饋送的文件)。

第二個錯誤需要更多上下文,您可以發布代碼嗎? 我99%肯定您會遵循一些過時的示例,但要使用新的庫版本。 例如,有沒有Durationakka.util ,沒有RoundRobinRouterakka.routing等。

我建議您花一些時間探索/調整可用的樣本 ,例如: https : //github.com/akka/akka-samples/tree/master/akka-sample-main-scala

另外,請注意,akka的發展非常迅速,但具有可靠的文檔版本控制支持,因此對於每個庫發行版,網站上都有單獨的文檔部分。 當您訪問過時的發行文檔頁面時,每天都會至少有一次通知您。 這是指向他2.4.17文檔的鏈接: http ://doc.akka.io/docs/akka/2.4.17/scala.html

有2個選項:

  1. 將Java 7與Scala 2.7.2結合使用
  2. 使用另一個版本的scala(2.11.4)和Java 8:

示例build.sbt

scalaVersion := Option(System.getProperty("scala.version")).getOrElse("2.11.4")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM