【问题标题】:Play Framework - ExecutionContext cannot be resolved when trying to map a PromisePlay Framework - 尝试映射 Promise 时无法解析 ExecutionContext
【发布时间】:2015-10-09 06:13:57
【问题描述】:
WS.url("https://api.humanapi.co/v1/human"+url+"?updated_since="+updatedSince).setHeader("Authorization", "Bearer "+accessToken)
        .setHeader("Accept", "application/json").get().map(
                new Function<WSResponse, JsonNode>() {
                    public JsonNode apply(WSResponse response) {
                        JsonNode json = response.asJson();
                        success(json);
                        return json;
                    }
                }   
    ); 

这会显示错误“无法解析类型 scala.concurrent.ExecutionContext。它是从所需的 .class 文件中间接引用的”。

我已经尝试添加

import scala.concurrent.ExecutionContext;

但是错误只是从 promise 所在的行“移动”到文件的顶部,并且仍然无法编译。

我也试过添加

import play.api.libs.concurrent.Execution.Implicit.defaultContext;

但是没有这样的东西可以导入。

使用的播放框架是 2.4.2。

SBT 文件:

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.6"

resolvers ++= Seq(
    "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/",
    "sonatype snapshots" at "https://oss.sonatype.org/content/repositories/releases/"
)

checksums := Nil

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  "org.mockito" % "mockito-all" % "1.10.19",
  "commons-codec" % "commons-codec" % "1.10",
  "de.flapdoodle.embed" % "de.flapdoodle.embed.mongo" % "1.48.0",
  "org.mongodb.morphia" % "morphia" % "1.0.0-rc0"
)

libraryDependencies += "org.mongodb" % "mongodb-driver" % "3.0.2"

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

【问题讨论】:

  • 我做了,但没有任何东西可以帮助我解决问题。
  • 在大多数情况下,要使用的适当执行上下文将是 Play 默认线程池。这可以通过将其导入 Scala 源文件来使用:import play.api.libs.concurrent.Execution.Implicits._ playframework.com/documentation/2.4.x/…
  • 我知道。问题是“无法解析导入 play.api.libs.concurrent.Execution.Implicits._”。
  • 它是否在 SBT 中编译?如果是这样,你很好。它可能与日食有关。
  • 确实是 Eclipse 相关的。我有同样的问题,所有的东西都编译了,但是 eclipse 很适合它!这很烦人,因为它破坏了我依赖的所有 Eclipse 好东西,比如自动安排导入(Eclipse 会删除它不再“看到”的东西的各种导入,但这确实破坏了构建)。修复由 Aaron 提供,您只需要确保在设置 Eclipse 时不要跳过任何步骤。

标签: java scala playframework-2.0


【解决方案1】:

我遇到了同样的问题,并意识到我的 Play Eclipse 设置不完整(我错过了下面的第 2 步和第 3 步)。我重试了设置,这次是按照所有相关步骤进行的。 ExecutionContext 变得可解析。

Play Eclipse 设置说明

原文参考:https://www.playframework.com/documentation/2.4.x/IDE

更新参考:https://www.playframework.com/documentation/2.5.x/IDE

1) 将此行附加到 project/plugins.sbt:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

2) 将此行附加到 build.sbt:

EclipseKeys.preTasks := Seq(compile in Compile)

3) 将这些行附加到 build.sbt(假设您没有 Scala 源代码):

EclipseKeys.projectFlavor := EclipseProjectFlavor.Java           // Java project. Don't expect Scala IDE
EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources)  // Use .class files instead of generated .scala files for views and routes 

4) 保存所有项目文件。关闭 Eclipse。

5) 在命令提示符下,cd 到您的项目文件夹并运行:

activator "eclipse with-source=true"

6) 打开 Eclipse。打开你的项目。刷新如下:

包资源管理器 > 右键单击​​ your_project > 刷新

【讨论】:

  • 谢谢,我会试试这个,如果有帮助,我会修改答案。
  • @JayQ。除了尝试创建一个新的空白 Play 应用程序并严格遵循 Eclipse 设置说明之外,我不确定还有什么建议。
  • 你说得对,这一定是我的项目特有的问题。我创建了一个新项目并且它有效。我关注了playframework.com/documentation/2.4.x/IDE,基本上就是你发布的内容。
  • 这对我有用,这应该是公认的答案。
【解决方案2】:

只需从 Eclipse Marketplace 安装 ScalaIDE 插件。这将解决问题 + 允许您开发 Scala。

【讨论】:

  • 这可以完成工作,而且似乎是正确的做法。即使您有(无论出于何种原因)过时的 SBT Eclipse 插件和路径中的旧版 Play 也能正常工作 - 我们仍然坚持使用 sbt-eclipse-plugin 3.0.0 和 Play 2.4。
【解决方案3】:

解决方案:

导入 scala.concurrent.ExecutionContext;

忽略eclipse错误。

【讨论】:

  • 忽略“无法解决”问题可能会危及(禁用)Eclipse 代码辅助。请参阅下文了解我的情况。
  • 这个解决方案根本不可接受,请参阅下面 Aaron 的回答。
【解决方案4】:

还可以尝试从源目录(.project、.classpath 等)中删除 Eclipse 内容并重新导入项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2013-11-15
    • 2016-07-03
    • 2013-02-04
    • 2014-12-26
    • 2015-05-11
    相关资源
    最近更新 更多