如何让sbt在子项目specs2运行中使用正确的类加载器?

时间:2017-03-15 11:56:05

标签: multithreading scala sbt classloader

我在类加载器和规格方面遇到了一些奇怪的问题.2.8.7+。因为 类加载器看似由sbt管理,我特此在这里询问sbt的行为。

我已经提出了一个示例项目,展示了Github手头的问题 Shadowfiend/specs2-concurrent-boom-boom 。如上所述,问题在于 如果我运行all project1/test project2/test,project2最终可以使用线程上下文类加载器 这是ClasspathFilter引用project1而不是project2,反之亦然。 在某些情况下,项目1的工作人员将参考项目2的ClasspathFilter和 项目2的工作人员将同时参考项目1 ClasspathFilter

我在一些地方插入了一些断点,看到只有一个ForkJoinPool 实际上是为specs2生成的,即使在运行all project1/test project2/test时, 即使使用fork:= true。不是100%确定该池中的所有线程是否将依次结束 与相同的类加载器父或者什么,但似乎它可能是 问题的根源?

我在这里有点超出我的深度,但是我会很感激 产生的sbt和测试框架中的类加载器之间的预期交互 由sbt。

1 个答案:

答案 0 :(得分:1)

这已在Specs2 4.0.1中修复。