2013-02-08 133 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