我在使用类加载器和specs2 3.8.7+时遇到了一些奇怪的问题。因为类加载器似乎由sbt管理,所以我在这里专门询问sbt的行为。
我提出了一个示例项目,在Shadowfiend / specs2-concurrent-boom-boom上演示了Github上的问题。正如观察到的那样,问题在于,如果我运行all project1/test project2/test
,project2最终可能会使用线程上下文类加载器,该类加载器是ClasspathFilter
引用project1而不是project2的对象,反之亦然。在某些情况下,项目1的工人将同时引用项目2,ClasspathFilter
而项目2的工人将同时引用项目1 ClasspathFilter
。
我在几个地方插入了一些断点,并且看到ForkJoinPool
即使specs2实际运行时也只为specs2生成一个断点all project1/test project2/test
,即使使用fork:= true。不能100%确定该池中的所有线程是否最终将使用相同的classloader父级或其他名称,但是似乎可能是问题的根源?
我在这里不太深入,但是希望您对sbt中的类加载器与sbt产生的测试框架之间的预期交互有任何见解。
这在Specs2 4.0.1中已修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句