Scala初学者,在多个文件上编译和运行Scala程序

Scala初学者,在多个文件上编译和运行Scala程序,scala,compilation,classpath,Scala,Compilation,Classpath,我正在处理ScalaInAction中的示例,但我在运行示例时遇到了问题,这些示例分布在多个文件中,并且放在一个包中 这是代码 mongoclient.scala package com.scalainaction.mongo import com.mongodb._ class MongoClient(val host:String, val port:Int) { require(host != null, "You have to provide a host name")

我正在处理ScalaInAction中的示例,但我在运行示例时遇到了问题,这些示例分布在多个文件中,并且放在一个包中

这是代码

mongoclient.scala


package com.scalainaction.mongo
import com.mongodb._

class MongoClient(val host:String, val port:Int) {
    require(host != null, "You have to provide a host name")
    val underlying = new com.scalainaction.mongo.Mongo
    def this() = this("127.0.0.1", 27017)
    def version = underlying.getVersion
    def dropDB(name:String) = underlying.dropDatabase(name) 
    def createDB(name:String) = DB(underlying.getDB(name)) 
    def db(name:String) = DB(underlying.getDB(name))
}


package com.scalainaction.mongo
import com.mongodb.{DB => MongoDB}
import scala.collection.convert.Wrappers._

class DB private(val underlying: MongoDB) {
    private def collection(name: String) = underlying.getCollection(name)
    def readOnlyCollection(name: String) = new DBCollection(collection(name)) 

    def administrableCollection(name: String) = new
        DBCollection(collection(name)) with Administrable

    def updatableCollection(name: String) = new
        DBCollection(collection(name)) with Updatable

    def collectionNames = for(name

package com.scalainaction.mongo
import com.mongodb.{DBCollection => MongoDBCollection } 
import com.mongodb.DBObject

class DBCollection(override val underlying: MongoDBCollection) extends ReadOnly

trait ReadOnly {
  val underlying: MongoDBCollection
  def name = underlying.getName
  def fullName = underlying.getFullName
  def find(doc: DBObject) = underlying.find(doc)
  def findOne(doc: DBObject) = underlying.findOne(doc)
  def findOne = underlying.findOne
  def getCount(doc: DBObject) = underlying.getCount(doc)
}

trait Administrable extends ReadOnly {
  def drop: Unit = underlying.drop
  def dropIndexes: Unit = underlying.dropIndexes
}

trait Updatable extends ReadOnly {
  def -=(doc: DBObject): Unit = underlying.remove(doc)
  def +=(doc: DBObject): Unit = underlying.save(doc)
}
DB.scala


package com.scalainaction.mongo
import com.mongodb._

class MongoClient(val host:String, val port:Int) {
    require(host != null, "You have to provide a host name")
    val underlying = new com.scalainaction.mongo.Mongo
    def this() = this("127.0.0.1", 27017)
    def version = underlying.getVersion
    def dropDB(name:String) = underlying.dropDatabase(name) 
    def createDB(name:String) = DB(underlying.getDB(name)) 
    def db(name:String) = DB(underlying.getDB(name))
}


package com.scalainaction.mongo
import com.mongodb.{DB => MongoDB}
import scala.collection.convert.Wrappers._

class DB private(val underlying: MongoDB) {
    private def collection(name: String) = underlying.getCollection(name)
    def readOnlyCollection(name: String) = new DBCollection(collection(name)) 

    def administrableCollection(name: String) = new
        DBCollection(collection(name)) with Administrable

    def updatableCollection(name: String) = new
        DBCollection(collection(name)) with Updatable

    def collectionNames = for(name

package com.scalainaction.mongo
import com.mongodb.{DBCollection => MongoDBCollection } 
import com.mongodb.DBObject

class DBCollection(override val underlying: MongoDBCollection) extends ReadOnly

trait ReadOnly {
  val underlying: MongoDBCollection
  def name = underlying.getName
  def fullName = underlying.getFullName
  def find(doc: DBObject) = underlying.find(doc)
  def findOne(doc: DBObject) = underlying.findOne(doc)
  def findOne = underlying.findOne
  def getCount(doc: DBObject) = underlying.getCount(doc)
}

trait Administrable extends ReadOnly {
  def drop: Unit = underlying.drop
  def dropIndexes: Unit = underlying.dropIndexes
}

trait Updatable extends ReadOnly {
  def -=(doc: DBObject): Unit = underlying.remove(doc)
  def +=(doc: DBObject): Unit = underlying.save(doc)
}
所有程序都放在同一个包中
com.scalainaction.mongo

我不使用IDE,所以我通过运行


scalac mongoclient.scala DB.scala DBCollection.scala
我的$CLASSPATH包含mongodb.jar文件,还指向我的应用程序目录中的com.scalainaction.mongo文件夹

现在我打算运行一个程序,通过运行 scala quickTour.scala-cp$CLASSPATH`

导入com.scalainaction.mongo_ 导入com.mongodb.BasicDBObject def客户端=新的MongoClient(“127.0.0.1”,27017) def db=client.db(“mydb”) (姓名) 但是我的应用程序找不到MongoClient类,我得到了这个错误

quickTour.scala:1: error: object scalainaction is not a member of package com import com.scalainaction.mongo._ ^ /Users/sid/scala_apps/quickTour.scala:4: error: MongoClient does not have a constructor def client = new MongoClient("127.0.0.1", 27017) ^ two errors found scala:1:错误:对象scalainaction不是包com的成员 导入com.scalainaction.mongo_ ^ /Users/sid/scala\u apps/quickTour.scala:4:错误:MongoClient没有构造函数 def客户端=新的MongoClient(“127.0.0.1”,27017) ^ 发现两个错误 我不明白为什么它找不到构造函数。我已经用def this方法定义了一个重载构造函数

为什么找不到com.scalanation.mongo

如果能在这方面得到任何帮助,我将不胜感激

**更新**

我的com/scalainaction/mongo文件夹中的文件是

Administrable$class.class DB$.class ReadOnly$class.class Administrable.class DB.class ReadOnly.class DB$$anon$1.class DBCollection.class Updatable$class.class DB$$anon$2.class MongoClient$$anonfun$1.class Updatable.class DB$$anonfun$collectionNames$1.class MongoClient.class 可管理$class.class DB$.class只读$class.class Administrable.class DB.class ReadOnly.class DB$$anon$1.class DBCollection.class可更新$class.class DB$$anon$2.class MongoClient$$anonfun$1.class Updateable.class DB$$anonfun$collectionNames$1.class MongoClient.class
问题是您的com和/或com/scalainaction文件夹是空的。在那里放一些类,它应该可以工作。

您能详细说明一下吗?我的com/scalainaction/mongo文件夹中似乎已经有了编译后的所有.class文件。我已将在那里找到的文件作为更新文件添加到com和Test2.scala中的Test1.scala在com.scalainaction包中。将此链接作为参考。跟随该链接。我的/com目录中没有空的com文件夹。还有什么可以尝试的吗?