ko karam
ko karam

Reputation: 41

How to use phantom in scala main object

I'm trying to use phantom to handle my Cassandra This is my example to learn how can I use phantom (thanks to Thiago)

https://github.com/iamthiago/cassandra-phantom

I can run successfully 'SongTest'.

But I have some trouble to run database.create in my scala main object. Same code in 'scalatest' successfully run. But in my scala main object, it fail. This is my source code

package com.cassandra.phantom.modeling

import com.cassandra.phantom.modeling.database._
import com.cassandra.phantom.modeling.connector._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
/**
  * Created by karamko on 2017. 3. 28..
  */

class TestCass extends EmbeddedDatabase with Connector.connector.Connector {
  def create() {
    database.create(5.seconds)
  }
}

object Main extends App{
  val test = new TestCass
  test.create()
}

and This is my error

Exception in thread "main" java.lang.NoClassDefFoundError: scala/reflect/runtime/package$
    at com.outworkers.phantom.column.AbstractColumn$class.com$outworkers$phantom$column$AbstractColumn$$_name(AbstractColumn.scala:55)
    at com.outworkers.phantom.column.Column.com$outworkers$phantom$column$AbstractColumn$$_name$lzycompute(Column.scala:24)
    at com.outworkers.phantom.column.Column.com$outworkers$phantom$column$AbstractColumn$$_name(Column.scala:24)
    at com.outworkers.phantom.column.AbstractColumn$class.name(AbstractColumn.scala:58)
    at com.outworkers.phantom.column.Column.name(Column.scala:24)
    at com.outworkers.phantom.column.PrimitiveColumn.qb(PrimitiveColumn.scala:38)
    at com.outworkers.phantom.builder.query.RootCreateQuery$$anonfun$lightweight$1.apply(CreateQuery.scala:48)
    at com.outworkers.phantom.builder.query.RootCreateQuery$$anonfun$lightweight$1.apply(CreateQuery.scala:48)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.immutable.Set$Set4.foreach(Set.scala:200)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractSet.scala$collection$SetLike$$super$map(Set.scala:47)
    at scala.collection.SetLike$class.map(SetLike.scala:92)
    at scala.collection.AbstractSet.map(Set.scala:47)
    at com.outworkers.phantom.builder.query.RootCreateQuery.lightweight(CreateQuery.scala:48)
    at com.outworkers.phantom.builder.query.RootCreateQuery.ifNotExists(CreateQuery.scala:71)
    at com.outworkers.phantom.CassandraTable.autocreate(CassandraTable.scala:92)
    at com.cassandra.phantom.modeling.database.SongsDatabase$$anon$1$$anonfun$createQueries$1.apply(SongsDatabase.scala:15)
    at com.cassandra.phantom.modeling.database.SongsDatabase$$anon$1$$anonfun$createQueries$1.apply(SongsDatabase.scala:15)
    at com.outworkers.phantom.database.ExecutableCreateStatementsList.future(Database.scala:173)
    at com.outworkers.phantom.database.Database.createAsync(Database.scala:85)
    at com.outworkers.phantom.database.Database.create(Database.scala:75)
    at com.cassandra.phantom.modeling.SongsStreaming$.main(Main.scala:29)
    at com.cassandra.phantom.modeling.SongsStreaming.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: scala.reflect.runtime.package$
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 30 more

Upvotes: 2

Views: 352

Answers (1)

ko karam
ko karam

Reputation: 41

I solve my problem adding below dependency

libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value

Thanks a lot

Upvotes: 2

Related Questions