2009-05-03 1 views
3

Я хотел бы показать номер версии пользовательской функции Eclipse, которую я разрабатываю в заголовке своей перспективы. Есть ли способ получить номер версии из плагина среды выполнения и/или рабочей среды?Как я могу получить номер версии пользовательской функции Eclipse во время выполнения?

ответ

6

Что-то вроде:

Platform.getBundle("my.feature.id").getHeaders().get("Bundle-Version"); 

должен сделать трюк.

Примечание (from this thread), что он не может быть использован в любом месте в пределах сам плагин:
this.getBundle() не действует до тех пор, пока ПОСЛЕ super.start(BundleContext) был вызван плагином.
Так что если вы используете this.getBundle() в своем конструкторе или в пределах вашего start(BundleContext) перед вызовом super.start(), тогда он вернет null.


Если это не удается, то есть здесь в more complete "version":

public static String getPlatformVersion() { 
    String version = null; 

    try { 
    Dictionary dictionary = 
     org.eclipse.ui.internal.WorkbenchPlugin.getDefault().getBundle().getHeaders(); 
    version = (String) dictionary.get("Bundle-Version"); //$NON-NLS-1$ 
    } catch (NoClassDefFoundError e) { 
    version = getProductVersion(); 
    } 

    return version; 
} 

public static String getProductVersion() { 
    String version = null; 

    try { 
    // this approach fails in "Rational Application Developer 6.0.1" 
    IProduct product = Platform.getProduct(); 
    String aboutText = product.getProperty("aboutText"); //$NON-NLS-1$ 

    String pattern = "Version: (.*)\n"; //$NON-NLS-1$ 
    Pattern p = Pattern.compile(pattern); 
    Matcher m = p.matcher(aboutText); 
    boolean found = m.find(); 

    if (found) { 
     version = m.group(1); 
    } 
    } catch (Exception e) { 

    } 

    return version; 
} 
+3

AFAIK, это работает для плагинов, но не для функции. Я не уверен, что есть способ получить версию для функций. – zvikico

1

я использую первый вариант:

protected void fillStatusLine(IStatusLineManager statusLine) { 
    statusItem = new StatusLineContributionItem("LastModificationDate"); //$NON-NLS-1$ 
    statusItem.setText("Ultima Actualizaci\u00f3n: "); //$NON-NLS-1$ 
    statusLine.add(statusItem); 
    Dictionary<String, String> directory = Platform.getBundle("ar.com.cse.balanza.core").getHeaders(); 
    String version = directory.get("Bundle-Version"); 

    statusItem = new StatusLineContributionItem("CopyRight"); //$NON-NLS-1$ 
    statusItem.setText(Messages.AppActionBar_18); 
    statusLine.add(statusItem); 
} 
+0

еще лучше: \t Строка version = Platform.getBundle ("ar.com.cse.balanza.core"). GetVersion(). ToString(); – Nicolas400

0

Как @zvikico говорит выше, принятый ответ не работает для Особенности, только плагины (OSGi Bundles, какие функции нет). Способ получения информации об установленных функциях - org.eclipse.core.runtime.Platform.getBundleGroupProviders() как described here.

0

версию того, что VonC при условии, чтобы получить первичную Eclipse, номер версии, но один, который не ссылается на внутренние классы (которые вы должны избегать делать):

Platform.getBundle(PlatformUI.PLUGIN_ID).getHeaders().get("Bundle-Version"); 
Смежные вопросы