如何在Eclipse RCP应用程序中查找插件ID

3

是否有API方法可以获取当前插件的ID?

注意:我的RCP应用程序包含多个插件项目,其中一些不包含插件类(Activator类)。

因此,我无法使用这种方法获取插件ID:

Plugin.getBundle().getSymbolicName();
2个回答

0
在每个插件类中,您必须拥有私有静态实例变量来表示您的插件,并且您应该实现一个getInstance()方法来返回对该实例的引用。我相信您已经在做这个了,如果没有,请参阅Plugin类的参考文档。在YorPluginClass1.getInstance().getBundle().getSymbolicName();YorPluginClass2.getInstance().getBundle().getSymbolicName();之后,应该返回它们各自插件的符号名称。

0

我在一个激活器中使用以下代码:

/**
 * 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已经被弃用了,但我还没有时间更新它...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接