как найти идентификатор плагина в приложении eclipse rcp - PullRequest
3 голосов
/ 13 марта 2012

есть ли метод API для получения идентификатора текущего плагина?

примечание: мое приложение rcp содержит более одного проекта плагина, некоторые из них не содержат класс плагина (класс Activator)

, поэтому я не могу получить идентификатор плагина, используйте такой метод:

Plugin.getBundle().getSymbolicName();

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Я использую следующий код в одном из моих Activators:

/**
 * Returns the bundle id of the bundle that contains the provided object, or <code>null</code>
 * if the bundle could not be determined.
 * 
 * @param clazz the object to test
 * @return the build ID or <code>null</code>
 */
public String getBundleId(Class<? extends Object> clazz) {
    if (clazz == null) return null;

    final PackageAdmin packageAdmin = getBundleAdmin();
    if (packageAdmin == null) return null;

    final Bundle source = packageAdmin.getBundle(clazz);
    if (source == null || source.getSymbolicName() == null) return null;

    return source.getSymbolicName();
}

/**
 * Returns the OSGi Package Admin service, if available.
 */
public PackageAdmin getBundleAdmin() {
    if (bundleTracker == null) {
        bundleTracker = new ServiceTracker(getContext(), PackageAdmin.class.getName(), null);
        bundleTracker.open();
    }
    return (PackageAdmin) bundleTracker.getService();
}

И да, я знаю, что PackageAdmin устарел, но у меня не было времени обновить его...

0 голосов
/ 13 марта 2012

В каждом классе плагина у вас должна быть ваша личная статическая переменная экземпляра для вашего плагина, и вы должны реализовать метод getInstance () для возврата ссылки на экземпляр, я полагаю, что вы уже должны это делать, если не видите ссылкудокументация для класса плагинов.После YorPluginClass1.getInstance().getBundle().getSymbolicName(); и YorPluginClass2.getInstance().getBundle().getSymbolicName(); следует указать, должен возвращать символические имена соответствующих плагинов.

...