Как я могу получить номер версии пользовательской функции Eclipse во время выполнения?
-
03-07-2019 - |
Вопрос
Я хотел бы отобразить номер версии настраиваемой функции Eclipse, которую я разрабатываю, в строке заголовка ее перспективы. Есть ли способ получить номер версии из плагина времени выполнения и / или рабочей среды?
Решение
Что-то вроде:
Platform.getBundle("my.feature.id").getHeaders().get("Bundle-Version");
должен сделать свое дело.
Обратите внимание ( из этой темы ), что он не может использоваться где угодно внутри самого плагина:
this.getBundle ()
недействителен, пока AFTER 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;
}
Другие советы
Я использую первый вариант:
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);
}
Как сказано выше в @zvikico, принятый ответ не работает для Функций, а только для Плагинов (Пакетов OSGi, которые не являются Функциями). Чтобы получить информацию об установленных функциях, используйте org.eclipse.core.runtime.Platform.getBundleGroupProviders ()
как описанный здесь .
Версия, предоставленная VonC для получения основного номера версии Eclipse, но та, которая не ссылается на внутренние классы (что вам следует избегать):
Platform.getBundle(PlatformUI.PLUGIN_ID).getHeaders().get("Bundle-Version");