当库尝试从另一个类访问类时,使用SBT运行集成测试时出现ClassNotFoundException

时间:2013-03-07 18:55:33

标签: scala sbt

我们有一个复杂的Scala项目,它使用Scala / Java世界中的许多不同的库。我们使用lift-json从我们的数据源生成Json输出。有时,我们需要将其中的一部分缓存到memcached。我们为此使用spymemcached。在某些情况下,我们直接在Memcached中缓存lift-json JObject的序列,而不使用任何其他抽象。

这很有效:

  • 生产中
  • 从IDE(IntelliJ)
  • 运行集成测试时
  • 关于我们的暂存环境

但是,在使用sbt it:test运行集成测试时,我们从Spymemcached获得以下异常:

2013-03-07 13:26:04.393 WARN net.spy.memcached.transcoders.SerializingTranscoder:  Caught CNFE decoding 4074 bytes of data
java.lang.ClassNotFoundException: net.liftweb.json.JsonAST$JObject
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:266)
    at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:622)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1593)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
    at scala.collection.immutable.$colon$colon.readObject(List.scala:404)
    at sun.reflect.GeneratedMethodAccessor44.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1872)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
    at net.spy.memcached.transcoders.BaseSerializingTranscoder.deserialize(BaseSerializingTranscoder.java:100)
    at net.spy.memcached.transcoders.SerializingTranscoder.decode(SerializingTranscoder.java:66)
    at net.spy.memcached.transcoders.TranscodeService$1.call(TranscodeService.java:42)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at net.spy.memcached.transcoders.TranscodeService$Task.run(TranscodeService.java:89)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

我们的测试仍在运行,因此这是一个低优先级的错误。但是我们希望我们的测试在尽可能接近生产的环境中运行(这实际上是有效的)。我想spymemcached每次都知道lift-json的存在。

这看起来像是一个类路径问题,但我很难找到如何找到这个问题。

0 个答案:

没有答案