Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在这个简单的播放示例中,如何使用非托管依赖项?_Scala_Build_Playframework 2.0 - Fatal编程技术网

Scala 在这个简单的播放示例中,如何使用非托管依赖项?

Scala 在这个简单的播放示例中,如何使用非托管依赖项?,scala,build,playframework-2.0,Scala,Build,Playframework 2.0,我正在尝试编写一个Scala Play web服务,该服务返回JSON对象,并且在调用依赖项中的函数时遇到问题。有人能告诉我在这个简化的例子中我做错了什么吗 我有一个名为SimpleJSONAPI的项目,它由以下对象组成 package com.github.wpm.SimpleJSONAPI import play.api.libs.json.{JsValue, Json} object SimpleJSONAPI { def toJson(s: String): JsValue =

我正在尝试编写一个Scala Play web服务,该服务返回JSON对象,并且在调用依赖项中的函数时遇到问题。有人能告诉我在这个简化的例子中我做错了什么吗

我有一个名为SimpleJSONAPI的项目,它由以下对象组成

package com.github.wpm.SimpleJSONAPI

import play.api.libs.json.{JsValue, Json}

object SimpleJSONAPI {
  def toJson(s: String): JsValue = Json.toJson(Map("value" -> s))
}
单元测试确认给定一个字符串,它返回一个JSON对象,其形式为
{“value”:“string”}

我有一个单独的Play2.2.3Scala项目,我通过键入
PlayNewPlayJSON
创建了该项目。我向生成的应用程序中的控制器添加了以下
json
操作

package controllers

import play.api.mvc._

import com.github.wpm.SimpleJSONAPI._

object Application extends Controller {

  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }

  def json = {
    val j = SimpleJSONAPI.toJson("The JSON API")
    Action {
      Ok(j)
    }
  }
}
我还添加了这条路线

GET        /json                controllers.Application.json
在PlayJSON项目的根目录中,我有一个lib目录,其中包含由simplejsonapi构建的
simplejsonapi_2.11.jar
。这似乎包含正确的代码

> jar tf lib/simplejsonapi_2.11.jar 
META-INF/MANIFEST.MF
com/
com/github/
com/github/wpm/
com/github/wpm/SimpleJSONAPI/
com/github/wpm/SimpleJSONAPI/SimpleJSONAPI$.class
com/github/wpm/SimpleJSONAPI/SimpleJSONAPI.class
这是可以编译的,但是当我尝试连接到
localhost:9000/json
时,在
val j
赋值行中出现以下运行时错误

java.lang.NoSuchMethodError: scala.Predef$.ArrowAssoc(L/java/lang/Object;)Ljava/lang/Object;
我在一个单元测试中也看到了同样的错误,该测试使用一个
FakeRequest
来执行
/json
路由

如果我将
toJson
函数从外部依赖项复制到Play应用程序中,一切都会正常工作


据我所知,我做的一切都是正确的,错误信息是不透明的。有人能告诉我如何让它工作吗?

鉴于您使用API的方式,我认为您的导入是不正确的。在导入时排除对象名称

import com.github.wpm.SimpleJSONAPI._
或者更改用法以删除对象名称

val j = toJson("The JSON API")

这是Scala编译器版本兼容性的问题。我用Scala 2.11编译了我的
SimpleJSONAPI
依赖项,而Play应用程序是用Scala 2.10构建的。当我将
SimpleJSONAPI
依赖项更改为也使用Scala 2.10构建时,我能够在我的Play应用程序中使用它


这是令人困惑的,因为从项目文件中看不出Scala a Play app使用的是哪个版本,而且关于
ArrowAssoc
的错误消息没有表明这是编译器版本问题。

你说得对。我的
导入
行不正确。当我修复它时,我仍然有一个问题。我更新了问题的案文,以反映这一点。