【问题标题】:scala Either and akka.dispatch Future missing while compilingscala Either 和 akka.dispatch Future 在编译时丢失
【发布时间】:2013-05-19 02:44:16
【问题描述】:

我正在尝试使用 Spray Servlet 创建 REST 服务,但无法编译。 您可以在下面找到我的 build.sbt:

name := "someservice"

version := "0.0.1"

scalaVersion := "2.10.0"

resolvers += "spray repo" at "http://repo.spray.io"

libraryDependencies += "io.spray" % "spray-servlet" % "1.0-M3"

libraryDependencies ++= Seq(
  "io.spray"            %   "spray-servlet" % "1.0-M3",
  "io.spray"            %   "spray-util"    % "1.0-M3",
  "io.spray"            %   "spray-http"    % "1.1-M7",
  "com.typesafe.akka"   %%  "akka-actor"    % "2.1.0",
  "org.specs2"          %%  "specs2"        % "1.13" % "test",
  "org.eclipse.jetty.orbit" %   "javax.servlet"  % "3.0.0.v201112011016" artifacts Artifact("javax.servlet", "jar", "jar")
 )

我得到 com 'sbt update compile' 的错误是:

[错误] 错误的符号引用。 package.class 中的签名是指术语 Either [错误] 在包 scala 中不可用。 [错误] 它可能在当前类路径中完全丢失,或者版本在 [错误] 类路径可能与编译时使用的版本不兼容 [错误] package.class。 [错误] 错误的符号引用。 package.class 中的签名指的是 Future 类型 [错误] 包 akka.dispatch 不可用。 [错误] 它可能在当前类路径中完全丢失,或者版本在 [错误] 类路径可能与使用的版本不兼容 [错误] 编译 package.class。 [error] 发现两个错误 [错误] (compile:compile) 编译失败

我是否也必须将 scala 库添加到 sbt 构建文件中,还是我缺少其他东西?

【问题讨论】:

  • 对不同的模块使用相同版本的 spray,并且您不需要 akka 依赖项,因为 Spray 应该自动将其引入。这有帮助吗?
  • 你能分享你项目的完整源代码吗?这可能是一个错误。
  • 只需要声明spray-servlet,并从spray中进行spray-routing。您还必须包括 akka-actor (正如您所做的那样),因为它仅在喷雾中声明为“提供”。如果还是有问题,也可以在spray-user邮件列表中提问。

标签: scala dependencies sbt


【解决方案1】:

tld;dr:尝试用 1.1-M7 替换 1.0-M3

您使用的 Spray 工件似乎是针对 Scala 2.9.2 编译的,它与 Scala 2.10 二进制不兼容。通常,Scala 工件在工件名称中包含 Scala 二进制版本,这正是因为主要的 Scala 版本不兼容二进制。

后来的 spray-util 里程碑是针对 Scala 2.10.0-RC5(基于 pom)编译的,从技术上讲应该可以工作。

【讨论】:

    【解决方案2】:

    通过使用所有相同的喷涂版本 (1.1-M7) 并升级到 Scala 2.10.1 解决

    【讨论】:

      猜你喜欢
      • 2015-01-05
      • 2016-01-23
      • 2015-12-28
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 2019-09-23
      • 2021-01-18
      • 2018-01-02
      相关资源
      最近更新 更多