我正在构建一个 Eclipse 插件,它提供了常规插件项目中的一组核心功能。我通过片段项目提供的可选功能。但我需要这些片段在启动时向主插件注册。
我不能在片段项目中有 Bundle-Activator。所以我想知道是否有一些替代机制来声明一个入口点或一些我可以 Hook 的回调?
如果除了将片段项目转换为常规插件项目之外别无选择,是否有我需要注意的缺点?
这是我根据接受的答案使用的解决方案:
final IExtensionRegistry registry = Platform.getExtensionRegistry();
final IExtensionPoint extensionPoint = registry.getExtensionPoint("myextensionid");
final IExtension[] extensions = extensionPoint.getExtensions();
for (int j = 0; j < extensions.length; ++j)
{
final IConfigurationElement[] points = extensions[j].getConfigurationElements();
for (int i = 0; i < points.length; ++i)
{
if ("myelementname".equals(points[i].getName()))
{
try
{
final Object objImpl= points[i].createExecutableExtension("class");
objImplList.add(provider);
}
catch (CoreException e)
{
}
}
}
}
最佳答案
您可以定义一个扩展点并通过扩展查找/调用您的片段类。
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint extensionPoint = registry
.getExtensionPoint("myplugin.myextension");
IConfigurationElement points[] = extensionPoint
.getConfigurationElements();
for (IConfigurationElement point : points) {
if ("myextensionFactory".equals(point.getName())) {
Object impl = point.createExecutableExtension("class");
if (impl instanceof IMyExtension) {
((IMyExtension) impl).foo();
}
}
}
}
编辑:
To use this approach I have to convert my fragments projects to plug-in projects. – bmatthews68
你不应该这样做。例如,在我的测试代码中,我在主机插件中有以下文件:
META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Myplugin Plug-in
Bundle-SymbolicName: myplugin;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: myplugin.Activator
Require-Bundle: org.eclipse.core.runtime
Eclipse-LazyStart: true
Export-Package: myplugin
plugin.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
<extension-point id="myextension" name="myextension"
schema="schema/myextension.exsd" />
</plugin>
片段包含这些文件:
META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Myfragment Fragment
Bundle-SymbolicName: myfragment;singleton:=true
Bundle-Version: 1.0.0
Fragment-Host: myplugin;bundle-version="1.0.0"
片段.xml:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<fragment>
<extension
point="myplugin.myextension">
<myextensionFactory
class="myfragment.MyExtension1">
</myextensionFactory>
</extension>
</fragment>
这些项目是使用 Eclipse 3.3.1.1 生成的。
关于java - Eclipse 片段项目是否有等效于 BundleActivator 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365946/