2016-04-28 5 views
1

ich diese Art von Code verwenden in plugin.xml um/um zu zeigen, um einen Menüpunkt je nach O Typ verbergen:Menüpunkt/hidden gezeigt je nach os.name in plugin.xml

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

Der Problem ist, dass os.name, die von System.getProperty("os.name") zurückgegeben wird, scheint nicht sehr standardisiert zu sein. Dies hängt von der Betriebssystemversion ab, speziell für Microsoft Windows.

Ich fragte mich, ob es eine Best Practice gab?

Antwort

1

Die Umgebungsvariable osgi.os hat einen besser definierten Wert für das Betriebssystem. Die Werte hierfür sind in org.eclipse.osgi.service.environment.Constants definiert:

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"; 

Hinweis: trotz seines Namens (und die Kommentare in der Constants Klasse) win32 gilt für 32- und 64-Bit-Windows.

Es gibt auch osgi.arch für die Prozessorarchitektur:

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"; 

Schließlich osgi.ws das Windowing-System gibt:

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"; 
+0

genau das, was ich für :-) Danke gesucht! –

Verwandte Themen