菜单项 shown/hidden 取决于 plugin.xml 中的 os.name
Menu item shown/hidden depending on os.name in plugin.xml
我在 plugin.xml 中使用这种代码是为了 show/hide 菜单项取决于 OS 类型:
<menu label="Help">
<command commandId="org.eclipse.ui.help.aboutAction" style="push">
<visibleWhen checkEnabled="false">
<not>
<systemTest property="os.name" value="Mac OS X">
</systemTest>
</not>
</visibleWhen>
</command>
</menu>
问题是System.getProperty("os.name")
返回的os.name好像不太规范。它可以依赖 OS 版本,专门针对 Microsoft Windows.
我想知道是否有最佳实践?
osgi.os
环境变量对 OS 有一个更明确的值。此值在 org.eclipse.osgi.service.environment.Constants
:
中定义
public static final String OS_WIN32 = "win32";
public static final String OS_LINUX = "linux";
public static final String OS_AIX = "aix";
public static final String OS_SOLARIS = "solaris";
public static final String OS_HPUX = "hpux";
public static final String OS_QNX = "qnx";
public static final String OS_MACOSX = "macosx";
public static final String OS_EPOC32 = "epoc32";
public static final String OS_OS400 = "os/400";
public static final String OS_OS390 = "os/390";
public static final String OS_ZOS = "z/os";
public static final String OS_UNKNOWN = "unknown";
注意:尽管它的名称(以及 Constants
class 中的注释)win32
适用于 32 位和 64 位 Windows。
处理器架构还有osgi.arch
:
public static final String ARCH_X86 = "x86";
public static final String ARCH_X86_64 = "x86_64";
public static final String ARCH_PA_RISC = "PA_RISC";
public static final String ARCH_PPC = "ppc";
public static final String ARCH_PPC64 = "ppc64";
public static final String ARCH_SPARC = "sparc";
public static final String ARCH_IA64 = "ia64";
public static final String ARCH_IA64_32 = "ia64_32";
最后osgi.ws
给出窗口系统:
public static final String WS_WIN32 = "win32";
public static final String WS_WPF = "wpf";
public static final String WS_MOTIF = "motif";
public static final String WS_GTK = "gtk";
public static final String WS_PHOTON = "photon";
public static final String WS_CARBON = "carbon";
public static final String WS_COCOA = "cocoa";
public static final String WS_S60 = "s60";
public static final String WS_UNKNOWN = "unknown";
我在 plugin.xml 中使用这种代码是为了 show/hide 菜单项取决于 OS 类型:
<menu label="Help">
<command commandId="org.eclipse.ui.help.aboutAction" style="push">
<visibleWhen checkEnabled="false">
<not>
<systemTest property="os.name" value="Mac OS X">
</systemTest>
</not>
</visibleWhen>
</command>
</menu>
问题是System.getProperty("os.name")
返回的os.name好像不太规范。它可以依赖 OS 版本,专门针对 Microsoft Windows.
我想知道是否有最佳实践?
osgi.os
环境变量对 OS 有一个更明确的值。此值在 org.eclipse.osgi.service.environment.Constants
:
public static final String OS_WIN32 = "win32";
public static final String OS_LINUX = "linux";
public static final String OS_AIX = "aix";
public static final String OS_SOLARIS = "solaris";
public static final String OS_HPUX = "hpux";
public static final String OS_QNX = "qnx";
public static final String OS_MACOSX = "macosx";
public static final String OS_EPOC32 = "epoc32";
public static final String OS_OS400 = "os/400";
public static final String OS_OS390 = "os/390";
public static final String OS_ZOS = "z/os";
public static final String OS_UNKNOWN = "unknown";
注意:尽管它的名称(以及 Constants
class 中的注释)win32
适用于 32 位和 64 位 Windows。
处理器架构还有osgi.arch
:
public static final String ARCH_X86 = "x86";
public static final String ARCH_X86_64 = "x86_64";
public static final String ARCH_PA_RISC = "PA_RISC";
public static final String ARCH_PPC = "ppc";
public static final String ARCH_PPC64 = "ppc64";
public static final String ARCH_SPARC = "sparc";
public static final String ARCH_IA64 = "ia64";
public static final String ARCH_IA64_32 = "ia64_32";
最后osgi.ws
给出窗口系统:
public static final String WS_WIN32 = "win32";
public static final String WS_WPF = "wpf";
public static final String WS_MOTIF = "motif";
public static final String WS_GTK = "gtk";
public static final String WS_PHOTON = "photon";
public static final String WS_CARBON = "carbon";
public static final String WS_COCOA = "cocoa";
public static final String WS_S60 = "s60";
public static final String WS_UNKNOWN = "unknown";