将sbt从0.12.2升级到0.13+后,自定义类加载器失败

时间:2014-10-26 23:19:30

标签: scala sbt classloader

更新我的build.properties以使用sbt 0.13+后,我无法再在运行时动态加载案例类。

使用sbt 0.12.2,我可以使用自定义classloader,但现在使用sbt 0.13.2我得到errorcaused by: java.lang.ClassNotFoundException: scala.Product

这是一个runnable example。运行sbt test将显示错误。

sbt 0.13中有什么变化让我的动态类加载恶作剧结束了,我该如何解决这个问题?

谢谢你看看!

-Julian

编辑:

使用sbt 0.13.7-M4可以部分解决这个问题。 sbt run成功,而sbt test给出了不同的error,其中似乎每个测试中的动态加载的类被加载两次。

1 个答案:

答案 0 :(得分:1)

测试中的“加载两次”错误是由于我没有将我的设置代码放在Specs2期望中。

此外,我需要在sbt 0.13+中使用不同的类加载器:问题是由于使用了错误的类加载器。

首先我尝试了ClassLoader loader = ClassLoader.getSystemClassLoader();,但之后就崩溃了。

接下来,在sbt 0.12.2的情况下,我尝试了ClassLoader loader = Thread.currentThread().getContextClassLoader();,但是这突破了sbt 0.13 +。

现在我正在使用一个虚拟类来探测并获得一个la probe.getClass().getClassLoader()的类加载器, 这似乎解决了这个问题。