6

即使在阅读了:Scala, question with a jar file之后,我仍然有点困惑。我正在尝试将一些包导入到我的 Scala 文件中,即使在添加到类路径之后,解释器也无法识别它们。

一个例子:

我有导入声明:

import org.json4s._

我从这里下载了 .jar:http: //mvnrepository.com/artifact/org.json4s/json4s-native_2.10/3.2.4

并使用以下命令添加到解释器类路径中:

scala> :cp /Users/aspangher13/Downloads/json4s-native_2.10-3.2.4.jar

Scala 承认类路径:

Your new classpath is: ".:/Users/aspangher13/Downloads/json4s-native_2.10-3.2.4.jar:/Users/aspangher13/Downloads/jna-3.5.2.jar"

但仍然抛出这个错误:

<console>:7: error: object scalatra is not a member of package org
   import org.json4s._

谁能看到我做错了什么?谢谢!!

作为后续,有谁知道在哪里可以找到这个包:JsonAST._?

4

2 回答 2

6

简单点,创建一个小 sbt 项目。

第一步——创建项目

出于您的目的,您不需要复杂的构建。所以只需创建两个文件:

./build.sbt

name := "name your project"

version := "0.1"

scalaVersion := "2.10.2" // or whatever you prefer

./project/build.properties

sbt.version=0.12.4

只需转到项目根文件夹并调用sbt

第二步——添加依赖

打开你的./build.sbt文件并添加:

libraryDependency ++= Seq(
  "org.scalatra" %% "scalatra" % "2.2.1",
  "org.scalatra" %% "scalatra-scalate" % "2.2.1",
  "org.scalatra" %% "scalatra-specs2" % "2.2.1" % "test",
  "org.json4s"   %% "json4s-native % "3.2.4",
  "net.java.dev.jna" & "jna" & "3.5.2"
)

第三步 - 运行控制台

不要忘记用reload任务重新加载sbt,然后调用consoleconsole-quick任务。这应该有效。

但是有更简单的方法可以做到这一点:

1) 使用 gitter8 - Scalatra gitter8 项目
2) 很少阅读关于Scalatra sbt 依赖项的内容

于 2013-07-02T17:01:43.503 回答
5

仍然不确定 :cp 是如何工作的,但如果你执行

scala -classpath "list of jars colon separated" 

然后在 REPL 里面做你的导入它应该可以工作

import org.json4s._
import org.xyz

但是,当您尝试使用这些类时,您可能会缺少 json4s 所需的传递依赖项,因此我们回到 @ 4lex1v 描述的 sbt 示例,它将处理此问题。创建一个小项目并运行sbt console确实会大大简化这一点。

似乎 -classpath 和 :cp 主要是为了让您的代码在 shell 中可用,然后只有在您了解所有传递依赖项或没有传递依赖项的情况下。

于 2014-12-25T18:15:45.863 回答