Как я могу получить номер версии пользовательской функции Eclipse во время выполнения? - PullRequest
3 голосов
/ 03 мая 2009

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

Ответы [ 4 ]

6 голосов
/ 03 мая 2009

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

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

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

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


Если это не помогло, у вас есть более полная "версия" :

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;
}
1 голос
/ 02 декабря 2011

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

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 голосов
/ 09 июля 2013

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

Platform.getBundle(PlatformUI.PLUGIN_ID).getHeaders().get("Bundle-Version");
0 голосов
/ 14 марта 2013

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

...