Почему вставка Phantom Cassandra получает основную ошибку java.lang.NoClassDefFoundError: scala/reflect/runtime/package error

Я очень новичок в фантоме, и у меня есть базовые знания о scala и cassandra. поэтому я пытаюсь сделать простой грубый пример с использованием фантома, поэтому я посмотрел несколько примеров в Google. наконец, я получил этот пример. но я запускаю этот код не так, как сказано в этом файле readme проекта. Я просто создаю проект intellij, и есть основной класс, подобный следующему.

import org.creative.document.dao.impl.{PhantomConnectorExample}
import org.creative.document.database.SongsDatabase
import org.creative.document.entity.Song

object DocumentAPIMain {

   def main(args: Array[String]): Unit = {

      val song = Song(songId,"Wahinnta Athnam gigum di","Pawana","Nanda Malini")

      val songsDatabase = new SongsDatabase(PhantomConnectorExample.connector)
      songsDatabase.saveOrUpdate(song)

   }

}

это было единственное изменение, которое я сделал, кроме всех зависимостей и всего, что указано выше.

Я создал пространство ключей cassandra, таблицу песен и таблицу song_by_artist вручную. ниже показано мое cassandra shema

CREATE KEYSPACE phantomtest WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

CREATE TABLE phantomtest.songs_by_artist (
artist text,
id timeuuid,
album text,
title text,
PRIMARY KEY (artist, id)
) WITH CLUSTERING ORDER BY (id ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';

CREATE TABLE phantomtest.songs (
id timeuuid PRIMARY KEY,
album text,
artist text,
title text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';

В конце концов, когда я запускаю свой основной метод, он выдает следующую ошибку

SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: scala/reflect/runtime/package$
at com.outworkers.phantom.column.AbstractColumn.com$outworkers$phantom$column$AbstractColumn$$_name(AbstractColumn.scala:55)
at com.outworkers.phantom.column.AbstractColumn.com$outworkers$phantom$column$AbstractColumn$$_name$(AbstractColumn.scala:54)
at com.outworkers.phantom.column.Column.com$outworkers$phantom$column$AbstractColumn$$_name$lzycompute(Column.scala:22)
at com.outworkers.phantom.column.Column.com$outworkers$phantom$column$AbstractColumn$$_name(Column.scala:22)
at com.outworkers.phantom.column.AbstractColumn.name(AbstractColumn.scala:58)
at com.outworkers.phantom.column.AbstractColumn.name$(AbstractColumn.scala:58)
at com.outworkers.phantom.column.Column.name(Column.scala:22)
at org.creative.document.database.SongsDatabase$anon$macro$1$1.store(SongsDatabase.scala:28)
at org.creative.document.database.SongsDatabase$anon$macro$1$1.store(SongsDatabase.scala:28)
at com.outworkers.phantom.CassandraTable.store(CassandraTable.scala:132)
at org.creative.document.database.SongsDatabase.saveOrUpdate(SongsDatabase.scala:28)
at org.creative.document.main.DocumentAPIMain$.main(DocumentAPIMain.scala:58)
at org.creative.document.main.DocumentAPIMain.main(DocumentAPIMain.scala)
Caused by: java.lang.ClassNotFoundException: scala.reflect.runtime.package$
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 13 more

Пожалуйста, помогите мне узнать проблему. что я сделал не так...


person randikaisuru    schedule 14.03.2019    source источник
comment
Одна из возможностей заключается в том, что вы используете версию Scala, отличную от той, для которой был скомпилирован Phantom...   -  person Alex Ott    schedule 14.03.2019
comment
Но мой файл build.sbt такой же, как и пример проекта, поэтому в нем упоминается 2.12.4, поэтому я также использую его. но если говорить о моей версии scala машины, то да, она была другой, это была 2.12.8, вы думали, что проблема была в этом?   -  person randikaisuru    schedule 14.03.2019
comment
хорошо - это должно быть совместимо, так как разница в минорной версии   -  person Alex Ott    schedule 14.03.2019
comment
@randikaisuru Вам нужна зависимость от Caused by: java.lang.ClassNotFoundException: scala.reflect.runtime.package$. Так что просто добавьте scala-reflect, вы должны как-то намеренно удалить его.   -  person flavian    schedule 09.05.2019


Ответы (1)


Я столкнулся с той же проблемой и добавил следующую зависимость.

"org.scala-lang" % "scala-reflect" % scalaVersion.value

Это сработало для меня.

person Mahesh Chand    schedule 14.08.2019