【问题标题】:Why Phantom Cassandra Insert getting "main" java.lang.NoClassDefFoundError: scala/reflect/runtime/package error为什么 Phantom Cassandra Insert 得到“main” java.lang.NoClassDefFoundError: scala/reflect/runtime/package 错误
【发布时间】:2019-08-05 04:45:31
【问题描述】:

我对 phantom 很陌生,我对 scala 和 cassandra 有基本的了解。所以我正在尝试使用 phantom 做简单的 crud 示例,所以我在 google 上查看了一些示例。最后我得到了this 的例子。但我运行这段代码不像这个项目自述文件所说的那样。我刚刚创建了一个 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

请帮我找出问题所在。我做错了什么......

【问题讨论】:

  • 一种可能是您使用的 Scala 版本与 Phantom 编译时使用的版本不同...
  • 但我的 build.sbt 文件与示例项目相同,所以它提到了 2.12.4,所以我也使用它。但如果谈论我的机器 scala 版本,是的,它是 2.12.8 不同,你认为这是问题吗?
  • 好的 - 它应该是兼容的,因为差异在于次要版本
  • @randikaisuru 你需要依赖Caused by: java.lang.ClassNotFoundException: scala.reflect.runtime.package$。所以只需添加scala-reflect,你一定是故意以某种方式删除它。

标签: scala cassandra phantom-dsl


【解决方案1】:

我遇到了同样的问题并添加了以下依赖项。

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

它对我有用。

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2016-09-27
    • 1970-01-01
    • 2019-09-05
    • 2017-08-18
    • 2016-10-22
    • 2019-10-27
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多