Frage

Ich möchte die Versionsnummer eines benutzerdefinierten Eclipse-Feature angezeigt I in der Titelleiste seiner Perspektive entwickle. Gibt es eine Möglichkeit, die Versionsnummer aus der Runtime-Plugin und / oder Werkbank?

zu erhalten
War es hilfreich?

Lösung

So etwas wie:

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

sollte es tun.

Hinweis ( aus diesem Thread ), dass es nicht werden überall in das Plugin selbst verwendet:
this.getBundle() ist nicht gültig, bis NACH super.start(BundleContext) auf Ihrem Plugin aufgerufen wurde.
Also, wenn Sie this.getBundle() in Ihrem Konstruktor oder in Ihrem start(BundleContext) vor dem Aufruf super.start() verwenden, dann wird es null zurück.


Wenn das fehlschlägt, können Sie hier einen

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

Andere Tipps

Ich benutze die erste Option:

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);
}

Wie @zvikico oben sagt, die akzeptierte Antwort funktioniert nicht für Funktionen, nur Plug-in (OSGi-Bundles, die Funktionen sind nicht). Die Art und Weise Informationen über die installierten Features zu bekommen, ist über org.eclipse.core.runtime.Platform.getBundleGroupProviders() wie beschrieben hier .

Eine Version von dem, was VonC bereitgestellt, um die primäre Eclipse-Versionsnummer abzurufen, aber eine, die nicht interne Klassen referenziert (die Sie vermeiden sollten tun):

Platform.getBundle(PlatformUI.PLUGIN_ID).getHeaders().get("Bundle-Version");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top