Java -XstartOnFirstThread 命令行选项在 Linux 中无法识别但在 OSX 中有效
Java -XstartOnFirstThread command line options unrecognized in Linux but working in OSX
我在单元测试中使用 -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 中的这个参数。
你这边理解有误。当你 运行 java -X 时,你会被告知:
The -X options are non-standard and subject to change without notice.
换句话说:任何以 -X 开头的东西都是 高度 实现特定的。当然,这也增加了版本控制的时刻。
含义:除非您在 Linux 和 Mac 上使用完全相同版本的 Oracle Java,否则任何以 -X 开头的东西可能 工作方式不同。
换句话说:很可能您的期望认为这在两个平台上都有效,但从一开始就是有缺陷的。
因为 -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>
我在单元测试中使用 -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 中的这个参数。
你这边理解有误。当你 运行 java -X 时,你会被告知:
The -X options are non-standard and subject to change without notice.
换句话说:任何以 -X 开头的东西都是 高度 实现特定的。当然,这也增加了版本控制的时刻。
含义:除非您在 Linux 和 Mac 上使用完全相同版本的 Oracle Java,否则任何以 -X 开头的东西可能 工作方式不同。
换句话说:很可能您的期望认为这在两个平台上都有效,但从一开始就是有缺陷的。
因为 -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>