Я являюсь новым с Scala, и я пишу простой RSS-ридер. У меня есть менеджер по классу для управления подачей и содержанием.
package lib
import scala.xml._
import java.net.URL
import net.liftweb.couchdb.{CouchDB, Database}
import dispatch.{Http, StatusCode}
/**
* @author smix
*
* Feeds manager
*/
object Manager {
var db = List[Database]()
/*
* Initialize CouchDb databases
*/
def init = {
this.appendDb(new Database("myserver.com", 5984, "content"))
}
/*
* Append a new database to the databases list
*/
private def appendDb(database: Database) : Unit = {
database :: db
// Strange exception if database has been already created
/* try {
this.db.head.createIfNotCreated(new Http())
} catch {
case e:java.lang.NoClassDefFoundError => {}
} */
}
/*
* Fetch articles from feed by url
*/
def fetchItems(feedUrl: String): List[scala.xml.Elem] = {
val rssFeed = XML.load( (new URL(feedUrl)).openConnection.getInputStream )
val items = rssFeed \ "channel" \ "item"
val articles: List[scala.xml.Elem] = List()
for(item <- items) {
item :: articles
}
articles
}
}
Я хочу сохранить содержание в CouchDb. У меня должен быть список баз данных дивана (подача, статьи, и т.д....). Я записал класс, но когда я называю appendDb, я получаю ошибку:
Exception in thread "main" java.lang.NoClassDefFoundError: lib/Manager$
at collector$.main(collector.scala:5)
at collector.main(collector.scala)
Caused by: java.lang.ClassNotFoundException: lib.Manager$
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 2 more
Когда я rewrited db
определение: var db = List[Int]()
и первая строка appendDb: 1 :: this.db
проект хорошо работал... Странно.
Кроме того, интересно, почему я получаю исключение, когда я звоню, createIfNotCreated для существующей базы данных (прокомментировал блок try-catch в appendDb).
Исключение указывает на то, что вам не хватает некоторых классов (предположительно, одного или нескольких файлов JAR) при запуске программы, хотя они либо не имеют отношения к ее компиляции, либо являются доступно тогда.
Также следует отметить, что первая строка в appendDb
ничего не выполняет. Он строит новый список
, помещая базу данных
в начало списка List
, на который ссылается db
, но полученное значение отбрасывается. Возможно, вы имели в виду следующее:
db = database :: db