2013-07-02 53 views
4

即使阅读:Scala, problem with a jar file,我仍然有点困惑。我试图将一些包导入到我的Scala文件中,即使在添加到classpath之后,解释器也不会识别它们。将.jar文件导入Scala环境

一个例子:

我有import语句:

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._?

+1

为什么不去简单的方法,使用sbt,将库放到./lib/文件夹中并调用'console'? – 4lex1v

+1

Alexlv当然是对的。但我认为你遇到的问题是你只包含了JSON4S的支持,而不是所有的Scalatra(甚至是它的核心)。 –

+0

对不起,澄清,我只是将其作为一个不起作用的导入语句的示例 –

回答

5

去简单,创建一个小的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 project
2)阅读小到约Scalatra sbt dependencies

+4

-1下次回答问题。 SBT不是Scala的一部分。 –

+0

我同意,Sbt不是答案,:cp行为也让我感到困惑,请解释它是如何在REPL – pferrel

+0

@pferrel中工作的,我认为这是topicstarter的答案。我知道如何使用SBT解决问题,如果您不知道这个工具或不知道如何使用它,您可以随时打开一个问题,然后问任何您想知道的问题。 – 4lex1v

4

仍然不知道如何:CP的作品,但如果执行

scala -classpath "list of jars colon separated" 

然后里面的REPL做你的进口它应该工作

import org.json4s._ 
import org.xyz 

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

看起来像-classpath和:cp主要是为了让你的代码在shell中可用,然后只有当你理解了所有的传递依赖或者没有。