我正在使用 -XstartonFirstThread 参数comgrance在单元测试中求解OS X中的SWT启动问题:
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<argLine>-XstartOnFirstThread</argLine>
</configuration>
</plugin>
</plugins>
</build>
在OSX中的测试通行证,但在Linux中失败,提到 -XstartonFirstThread 未被认可:
[/var/local/devtools/jdk1.8.0_141/jre/bin/java, -Dosgi.noShutdown=false,
-Dosgi.os=linux, -Dosgi.ws=gtk, -Dosgi.arch=x86_64, -XstartOnFirstThread,
-Dosgi.clean=true, -jar ...
21:22:35 [artifact:mvn] Unrecognized option: -XstartOnFirstThread
21:22:35 [artifact:mvn] Error: Could not create the Java Virtual Machine.
21:22:35 [artifact:mvn] Error: A fatal exception has occurred. Program will exit.
是否有任何方法可以在Linux上进行此操作,或者有一种在Tycho中添加条件以忽略Linux中的条件的方法。
AS -xstartonFirstThread选项是Mac OS X特定的,使用仅在MacOS中运行Junit Test时才会触发的配置文件,听起来是最佳选项。
<profiles>
<profile>
<id>platform-mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<argLine>-XstartOnFirstThread</argLine>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
您的末端存在误解。运行Java -X时,您会被告知:
-x选项是非标准的,可能会更改,恕不另行通知。
换句话说:以-x开头的任何内容is 高度特定于实现。当然,这也增加了版本掌握的时刻。
含义:除非您在Linux上和Mac上使用完全相同的Oracle Java版本,否则任何以-x ables of -x 开头的任何东西都无法以相同的方式工作。
换句话说:最有可能您的期望从两个平台上起作用,这是有缺陷的。