scala - sbt triggers classloader exception under console and run -


i have scala library build, test, , deploy (as jar) using mvn3. code works correctly under these build , test conditions. i'm attempting use library in client project client project uses sbt , have discovered difference between sbt , mvn3. in particular, under sbt console deserialization stack not have access classpath includes project dependencies. cause exception called in code path in library.

java.lang.classnotfoundexception: com.biosimilarity.lift.model.store.persistedmonadickvdbmongonodescope$persistencescope$basepersistedmonadickvdbnode$$anonfun$mget$2$$anonfun$apply$40$$anonfun$apply$41$$anonfun$apply$42 @ java.net.urlclassloader$1.run(urlclassloader.java:202) @ java.security.accesscontroller.doprivileged(native method) @ java.net.urlclassloader.findclass(urlclassloader.java:190) @ java.lang.classloader.loadclass(classloader.java:306) @ java.lang.classloader.loadclass(classloader.java:247) @ java.lang.class.forname0(native method) @ java.lang.class.forname(class.java:249) @ java.io.objectinputstream.resolveclass(objectinputstream.java:604) @ java.io.objectinputstream.readnonproxydesc(objectinputstream.java:1591) @ java.io.objectinputstream.readclassdesc(objectinputstream.java:1496) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1750) @ java.io.objectinputstream.readobject0(objectinputstream.java:1329) @ java.io.objectinputstream.readobject(objectinputstream.java:349) @ scala.collection.immutable.$colon$colon.readobject(list.scala:362) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) @ java.lang.reflect.method.invoke(method.java:597) @ java.io.objectstreamclass.invokereadobject(objectstreamclass.java:979) @ java.io.objectinputstream.readserialdata(objectinputstream.java:1873) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1777) @ java.io.objectinputstream.readobject0(objectinputstream.java:1329) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:1970) @ java.io.objectinputstream.readserialdata(objectinputstream.java:1895) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1777) @ java.io.objectinputstream.readobject0(objectinputstream.java:1329) @ java.io.objectinputstream.readobject(objectinputstream.java:349) @ com.biosimilarity.lift.model.store.persistedmonadickvdbmongonodescope$persistencescope$mongodbmanifest.ascachek(persistedmonadickvdbmongonode.scala:445) ... 

my code captures , serializes continuation (for long-lived state machine) , deserializes continuation advance state machine. under sbt console, when continuation being de-serialized resolveclass, triggered recursive invocation readobject, fails find class (even though class in jar associated project dependency). appears because classloader accessed via deserialization code path doesn't have access classpath has project's dependencies on it.

i attempted fix problem defining own objectinputstream , overriding resolveclass.

class defensiveobjectinputstream( in : inputstream ) extends objectinputstream( in ) {   override def resolveclass( desc : objectstreamclass ) : class[_] = {      try {       val currenttccl = thread.currentthread().getcontextclassloader()       currenttccl.loadclass( desc.getname() )     } catch {        case e : throwable => super.resolveclass(desc);     }         }     } 

this doesn't work, however, because problem triggered in recursive call , classloader accessed in recursive call doesn't have access project's classpath. i've made open source repro here. pretty empty sbt project calls library evince problem. there's pom.xml file equivalent mvn3-based project. works charm. appreciated.


Comments

Popular posts from this blog

java - How to specify maven bin in eclipse maven plugin? -

single sign on - Logging into Plone site with credentials passed through HTTP -

php - Why does AJAX not process login form? -