我使用 -XstartOnFirstThread 参数在单元测试中解决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中的这个参数。
答案 0 :(得分:0)
你的结局存在误解。当你运行java -X时,你会被告知:
-X选项是非标准的,如有更改,恕不另行通知。
换句话说:以-X开头的任何内容都是高度特定于实现。当然,这也增加了版本控制的时刻。
含义:除非您在Linux和Mac上使用完全相同版本的Oracle Java,否则以-X 开头的任何内容都可能的工作方式不同。
换句话说:很可能你的期望在两个平台上运行都是有缺陷的。
答案 1 :(得分:0)
As -XstartOnFirstThread选项是特定于Mac OS X的,使用只有在macOS中运行JUnit测试时才会触发的配置文件,听起来是最佳选择。
<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>