找不到类java.time.Duration - 继续使用存根

时间:2016-03-14 19:58:04

标签: scala sbt

假设:

$cat build.sbt 
scalaVersion := "2.11.8"

libraryDependencies ++= List(
  "io.spray"          %% "spray-client"        % "1.3.3"
  ,"io.spray"          %%  "spray-json"         % "1.3.2"
  ,"com.typesafe.akka" %% "akka-actor"          % "2.4.2"
  ,"com.typesafe"      % "config" % "1.3.0"
  ,"org.scalatest" % "scalatest_2.11" % "2.2.6" % "test"
)

使用此answer,我尝试使用JDK 7.

但是,我收到了以下错误:

$sbt -java-home /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/ clean test
[info] Loading project definition from /Users/Kevin/Workspace/Work/project/project
[info] Set current project to project (in build file:/Users/Kevin/Workspace/Work/project/)
[success] Total time: 0 s, completed Mar 14, 2016 3:51:10 PM
[info] Updating {file:/Users/Kevin/Workspace/Work/project/}project...
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] Compiling 9 Scala sources to /Users/Kevin/Workspace/Work/project/target/scala-2.11/classes...
[error] Class java.time.Duration not found - continuing with a stub.
[error] Class java.time.Duration not found - continuing with a stub.
[error] two errors found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 5 s, completed Mar 14, 2016 3:51:16 PM

看看这个answer,我猜/我猜测我需要添加一个java8时间库作为依赖项?

2 个答案:

答案 0 :(得分:2)

  

我不确定如何解决此错误。

此错误表示您的代码中的某个位置正在java.time.Duration中继,这是Java 8中公开的新API。由于您已降级为Java 7,因此该类已不再可用

删除依赖项,或者恢复为Java8。

答案 1 :(得分:2)

Akka 2.4需要JDK8,除非您使用的是商业版本,这在documentation中有所提及。

相关提取物

  

Akka要求您在计算机上安装Java 8或更高版本。

     

Typesafe提供了Akka的商业版本和相关项目,如Scala或Play,作为Reactive Platform的一部分,如果您的项目尚未升级到Java 8,则可用于Java 6。它还包括其他商业功能或库。

Typesafe config 1.3.0也depends on java8

  

1.2.1版及更早版本是为Java 6构建的,而新版本(1.3.0及更高版本)将是为Java 8构建的。

还要注意,spray-client 1.3.3依赖于Akka 2.3.9(参见http://spray.io/project-info/current-versions/#current-versions) 您可能希望升级到akka-http,这是喷涂的继承者。

(因为您似乎使用符合posix标准的系统,您可能需要查看jenv来管理每个项目的jdk版本)