如何让sbt在子项目specs2运行中使用正确的类加载器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让sbt在子项目specs2运行中使用正确的类加载器?相关的知识,希望对你有一定的参考价值。
我遇到了类加载器和specs2 3.8.7+的一些奇怪之处。因为类加载器似乎是由sbt管理的,所以我在这里特别询问sbt的行为。
我已经在Shadowfiend/specs2-concurrent-boom-boom 的Github上展示了一个示例项目。如上所述,问题是如果我运行all project1/test project2/test
,project2最终可能会使用一个线程上下文类加载器,它是一个引用project1而不是project2的ClasspathFilter
,反之亦然。在某些情况下,项目1的工作人员将参考项目2的ClasspathFilter
,项目2的工作人员将同时参考项目1的ClasspathFilter
。
我在一些地方插入了一些断点,看到实际上只为specs2生成了一个ForkJoinPool
,即使在运行all project1/test project2/test
时,即使使用fork:= true。不是100%确定该池中的所有线程是否最终都会使用相同的类加载器父级或者什么,但似乎它可能是问题的根源?
我在这里有点超出我的深度,但是对于sbt和sbt产生的测试框架中的类加载器之间的预期交互有任何见解。
这在Specs2 4.0.1中得到修复。
以上是关于如何让sbt在子项目specs2运行中使用正确的类加载器?的主要内容,如果未能解决你的问题,请参考以下文章
排除 specs2 作为 sbt 中 play 框架的传递依赖
如何在没有 sbt 的情况下运行 sbt 管理的应用程序项目?
SBT/Play2 多项目设置在运行/测试的类路径中不包括依赖项目