Maven surefire和JDK 11 [英] Maven surefire and JDK 11
问题描述
我正在尝试使Maven surefire在JDK 11下运行,但我不断收到这些错误:
I'm trying to get Maven surefire to run under JDK 11 but I keep getting these errors:
- 如果我将
reuseForks
设置为true:
- If I set
reuseForks
to true:
Error occurred in starting fork, check output in log
Process Exit Code: 1
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:670)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:283)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:246)
- 如果我将其设置为false:
Execution default-test of goal org.apache.maven.plugins:maven-surefire- plugin:3.0.0-M1:test
failed: java.lang.ClassNotFoundException: org.apache.maven.plugin.surefire.StartupReportConfiguration
我找到了这和
I've found this and this link that describe the same problem but they don't have any solution.
为复制此错误,我创建了此git存储库
For replication of this bug I created this git repo
推荐答案
似乎在将模块化项目用于test
时,您需要将forkCount
设置为0
:
Seems like while using a modular project to test
, you need to have forkCount
set as 0
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<forkCount>0</forkCount> <!-- changed this to 0 -->
<reuseForks>false</reuseForks>
<!-- <threadCount>1</threadCount> --> <!-- shall be used with 'parallel' -->
<printSummary>true</printSummary>
<!-- <skipTests>false</skipTests> --> <!-- defaults to false -->
<!-- run test in headless mode -->
<systemPropertyVariables>
<glass.platform>Monocle</glass.platform>
<monocle.platform>Headless</monocle.platform>
<prism.order>d3d</prism.order>
</systemPropertyVariables>
<argLine>
--add-exports javafx.graphics/com.sun.javafx.application=ALL-UNNAMED
--add-exports javafx.graphics/com.sun.glass.ui=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
存在
module-info.java
且启用了 的fork过程时,surefire 使用模块和未命名模块创建 mixed 类路径,导致 模块可见性问题,并阻止应用程序启动.
When
module-info.java
is present and fork process is enabled, surefire creates a mixed classpath with modules and unnamed modules causing module visibility issues and preventing the application to start.
注意 :禁用forkCount
和reuseForks
配置参数会导致抛出org.apache.maven.surefire.booter.SurefireBooterForkException
,类似于
Note: Disabling the forkCount
and reuseForks
configuration parameters, results in org.apache.maven.surefire.booter.SurefireBooterForkException
being thrown, similar to the one reported in SUREFIRE-1528.
如果这可以帮助Maven社区的开发人员,则同一运行中的执行转储将读取以下内容:
If this could help the developers at Maven community, the execution dump from the same run reads the following:
# Created at 2018-11-23T09:31:53.631
Corrupted STDOUT by directly writing to native stream in forked JVM 1. Stream 'Error occurred during initialization of boot layer'.
java.lang.IllegalArgumentException: Stream stdin corrupted. Expected comma after third character in command 'Error occurred during initialization of boot layer'.
at org.apache.maven.plugin.surefire.booterclient.output.ForkClient$OperationalData.<init>(ForkClient.java:507)
at org.apache.maven.plugin.surefire.booterclient.output.ForkClient.processLine(ForkClient.java:210)
at org.apache.maven.plugin.surefire.booterclient.output.ForkClient.consumeLine(ForkClient.java:177)
at org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.run(ThreadedStreamConsumer.java:88)
at java.base/java.lang.Thread.run(Thread.java:834)