2013-07-02 56 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中可用,然後只有當你理解了所有的傳遞依賴或者沒有。