2013-02-08 38 views
0

我創建了一個簡單的項目。在MongoDB中使用Scala - java.lang.NoClassDefFoundError:com/mongodb/DBObject

「sbt run」正常工作。

我運行「sbt package」後出現jar文件,但它不起作用。

$ scala target/scala-2.9.2/hello_2.9.2-0.1.jar 

以下錯誤occures:

java.lang.NoClassDefFoundError: com/mongodb/DBObject 

這裏是我的文件:

Hello.scala

package greeter 
object Hello extends App { 
    import com.mongodb.casbah.Imports._ 
    val mongoClient = MongoClient() 
    println("Connected to MongoDB") 
    val collection = mongoClient("test")("foo") 
    val doc = MongoDBObject("msg" -> "Hi from Scala!") 
    collection.insert(doc) 
    println("Doc inserted"); 
} 

build.sbt

name := "hello" 

mainClass := Some("greeter.Hello") 

version := "0.1" 

scalaVersion := "2.9.2" 

libraryDependencies += "org.mongodb" % "casbah_2.9.2" % "2.5.0" 

resolvers += "snapshots" at "https://oss.sonatype.org/content/repositories/snapshots" 

resolvers += "releases" at "https://oss.sonatype.org/content/groups/scala-tools" 

回答

1

運行scala命令時,需要將庫依賴項添加到類路徑中。假設你下載一個lib文件夾中的所有庫罐子,你將需要運行:

scala -cp "lib/*" target/scala-2.9.2/hello_2.9.2-0.1.jar 

在build.sbt,使用以下設置爲自動下載在lib_managed文件夾中所有的罐子:

retrieveManaged := true 
+0

謝謝。所以我需要將lib_managed文件夾中的所有jar文件複製到lib文件夾中?有沒有一個簡單的命令,或者我需要使用一些棘手的bash命令?我該如何將所有這些罐子結合在一起? – un1t 2013-02-09 05:34:19

+0

其實你可以直接使用的lib_managed文件夾: '斯卡拉-cp「lib_managed/*」目標/斯卡拉-2.9.2/hello_2.9.2-0.1.jar' 或者你可以複製整個文件夾: 'cp -rf lib_managed lib' – 2013-02-09 06:42:33

+0

我試過'-cp「lib_managed/*」',但它不起作用。同樣的錯誤發生在java.lang.NoClassDefFoundError:com/mongodb/DBObject中。比我複製所有jar到lib filder並使用'-cp「lib/*」',並且它工作。 – un1t 2013-02-09 06:49:38