拥有分叉的Java VM意味着什么?

我运行JUnit测试时有时会遇到此错误。

我并不是在问这个错误是什么。 我只是想知道java VM分叉时的含义是什么?

“分叉的VM”不是错误(尽管您获得的错误可能与它有关)。

编译和测试的各个方面(例如Maven)中涉及的一些工具是用Java编写的,并使用JVM自行运行。

如果您为应用程序运行unit testing而不分支VM,Maven将在Maven运行的同一个VM中运行这些测试。 因此,它可能受某些VM范围设置(例如某些系统属性)的影响。

为了避免由于Maven引起的副作用,可以在分叉的VM中运行测试,也就是说,在作为OS中的不同进程运行的完全独立的VM中运行。

(这可以应用于其他工具,Maven只是一个例子。)

破坏分叉的VM至少可以让您回到启动并编排这些unit testing的其他Java应用程序。 如果您在同一个VM中运行这些测试,那么您也会使启动测试的应用程序崩溃(从而获得非常少的信息)。

“ fork ” 是 Linux中用来表示执行另一个进程(松散地)的术语。 在这种情况下,分叉Java VM是一个子进程,用于按类或方法隔离unit testing,确保多个测试之间不会发生状态污染。

JUnit ant任务支持多种分叉模式,如下所示。

我看到错误表明分叉的VM在使用JUnit时已经死亡。 这意味着您的测试崩溃 ,并且您的JUnit运行程序(通常是ant)无法获得任何输出。

您应该尝试解决崩溃的原因。