是否有一种API方法来获取当前插件的ID?
注意:我的rcp应用程序包含多个插件项目,其中一些不包含Plugin类(Activator类)
所以我无法获得插件ID使用这样的方法:
Plugin.getBundle().getSymbolicName();
在每个插件类中,你必须拥有你的插件的私有静态实例变量,并且你应该实现一个getInstance()方法来返回对实例的引用,我相信你必须已经这样做了,如果没有看到参考docomentaion为插件类。在YorPluginClass1.getInstance().getBundle().getSymbolicName();
和YorPluginClass2.getInstance().getBundle().getSymbolicName();
之后应该给出应该返回各自插件的符号名称。
我在我的一个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
已被弃用,但我没有时间更新它...