Pregunta

I'm trying to reflect on a companion object. Using this...

import scala.reflect.runtime.{universe => ru}

private lazy val universeMirror = ru.runtimeMirror(getClass.getClassLoader)

def companion[T, T2](implicit tt: ru.TypeTag[T]): T2 = {
  val companionMirror = universeMirror.reflectModule(ru.typeOf[T].typeSymbol.companionSymbol.asModule)
  companionMirror.instance.asInstanceOf[T2]
}

Everything compiles fine, but at runtime, I get the following exception:

java.lang.NoClassDefFoundError: scala/reflect/api/TypeCreator
  ......
  at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:66) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) ~[netty-3.8.0.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[netty-3.8.0.Final.jar:na]
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [na:1.6.0_65]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [na:1.6.0_65]
  at java.lang.Thread.run(Thread.java:695) [na:1.6.0_65]
Caused by: java.lang.ClassNotFoundException: scala.reflect.api.TypeCreator
  at java.net.URLClassLoader$1.run(URLClassLoader.java:202) ~[na:1.6.0_65]
  at java.security.AccessController.doPrivileged(Native Method) ~[na:1.6.0_65]
  at java.net.URLClassLoader.findClass(URLClassLoader.java:190) ~[na:1.6.0_65]
  at java.lang.ClassLoader.loadClass(ClassLoader.java:306) ~[na:1.6.0_65]
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) ~[na:1.6.0_65]
  at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_65]
¿Fue útil?

Solución

Looks like you don't have scala-reflect.jar on your runtime classpath.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top