Java -XstartOnFirstThread命令行选项在Linux中无法识别但在OSX中工作

时间:2017-09-29 09:27:22

标签: java linux macos junit tycho-surefire-plugin

我使用 -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中的这个参数。

2 个答案:

答案 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>