我如何让 sbt 在子项目 specs2 运行中使用正确的类加载器?
How do I get sbt to use the right classloader in subproject specs2 runs?
我 运行 对类加载器和 specs2 3.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 生成的,即使 运行ning all project1/test project2/test
,
即使有 fork := true。不能 100% 确定该池中的所有线程是否都会依次结束
使用相同的类加载器父类或什么,但它似乎可能是
问题的根源?
我在这里有点力不从心,但我将不胜感激
sbt 中的类加载器和测试框架之间的预期交互产生
来自 sbt.
这已在 Specs2 4.0.1 中修复。
我 运行 对类加载器和 specs2 3.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 生成的,即使 运行ning all project1/test project2/test
,
即使有 fork := true。不能 100% 确定该池中的所有线程是否都会依次结束
使用相同的类加载器父类或什么,但它似乎可能是
问题的根源?
我在这里有点力不从心,但我将不胜感激 sbt 中的类加载器和测试框架之间的预期交互产生 来自 sbt.
这已在 Specs2 4.0.1 中修复。