1

我在单元测试中使用-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 中的这个参数。

4

2 回答 2

1

你有一个误解。当你运行 java -X 时,你会被告知:

-X 选项是非标准的,如有更改,恕不另行通知。

换句话说:以 -X 开头的任何东西都是高度特定于实现的。当然,这也增加了版本控制的时间。

含义:除非您在 Linux 和 Mac 上使用完全相同版本的 Oracle Java,否则以 -X 开头的任何内容都可能不会以相同的方式工作。

换句话说:您对这在两个平台上都有效的期望很可能一开始就有缺陷。

于 2017-09-29T11:36:14.230 回答
1

由于 -XstartOnFirstThread 选项是 Mac OS X 特定的,因此使用仅当 JUnit 测试在 macOS 中运行时才会触发的配置文件听起来是最佳选择。

<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>
于 2017-10-02T17:22:37.420 回答